オブジェクトの管理(編集、削除など)に使用できるようにしたいオプションを含む配列を渡すことができるヘルパーメソッドを構築しています。メソッドの簡略化されたバージョンは次のようになります。
def management_links(instance, actions, *parent)
actions.each do |action|
if (can? action, instance)
has_options = true
case action
when :destroy
options = {content: glyphicon('trash') + " Delete #{instance.class.to_s}", class: "delete #{instance.class.to_s.downcase}", method: :delete}
url = url_for [parent, instance]
end
end
end
end
ご覧のとおり、これは、構造を取得するために1回ネストされた(1つの親モデルを渡す)オブジェクトに対して完全に機能します。
parent_model / parent_id / model / id / action
しかし今、私は2回ネストされたモデルを持っているので、これはもうそれをカットしません。配列[@ grandparent、@ parent]を渡そうとしましたが、url_forにすでに配列があるため、機能しません。
'unlimited'親オブジェクトを渡してurl_forで動作させる方法はありますか?
*parent
は常に配列の一部になります(存在する場合)。そのように宣言してから、インスタンスを配列にプッシュしてみませんか。
def management_links(instance, actions, *parent)
parents = Array(parent) if parent
new_url = parents ? parents << instance : instance
actions.each do |action|
if (can? action, instance)
has_options = true
case action
when :destroy
options = {content: glyphicon('trash') + " Delete #{instance.class.to_s}", class: "delete #{instance.class.to_s.downcase}", method: :delete}
url = url_for new_url
end
end
end
end
私はArray()
それparent
が正しいデータ型であることを確認するために使用します(varの単一のインスタンスを渡すことができます)。
トピックから外れていますが、慣例を追求するために、複数のレイヤーによるネストについて読む必要があります。
リソースは、1レベルを超えてネストしないでください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加