1

初心者として、親アイテムを表示するときに子アイテムを作成するためのベストプラクティスを探していました。私は多くの説明を見つけましたが、かなり不完全で、私にはわかりません。誰かがベストプラクティスの完全な実装を説明できますか?包含と宣言を作成parent_itemしてchild_itemモデル化しました。リンクされた(手動で作成された)リストを「表示」ビューに表示できます。has_manybelongs_tochild_itemsparent_item

<%= link_to 'New Child Item', new_child_item_path %>次に、URLのパラメーターとして渡す親のIDを作成します。今、どちらに行くのですか?

  • ルートを変更しますか?
  • child_item.newコントローラにパラメータを追加しますか?
  • 値を格納するためにchild_itemフォームに非表示フィールドがありparent_item.idますか?

最高の説明にハグをさせていただきます!

ありがとう !

フレッド


こんにちは、あなたの助けに感謝します。このネストリソース機能を発見したので、それをうまく適用しようとしました。親から子を作成すると、フォームには渡されたparent_idが表示されます。

これが私のコードの更新です:(遊び場は親、風景は子です)

ルート

resources :playgrounds do
  resources :landscapes, :only=>[:new, :create]
end

SHOW(遊び場の親から)

  <%= link_to 'Add landscape', new_playground_landscape_path(@playground) %>

LANDSCAPE_CONTROLLER

def new
  @landscape = Landscape.new
  @landscape.playground_id = params[:playground_id]

フォーム(ランドスケープから)-このフォームにはランドスケープフィールドしかないため、@ playgroundを参照する必要はありませんでした(私は正しいですか?)

<%= form_for [@landscape] do |f| %>
...
  <div class="field">
    <%= f.label :playground_id %><br />
    <%=f.text_field :playground_id%>
  </div>

素晴らしい、それはうまくいきます。ただし、playground_idフィールドはフォームに表示されるべきではなく、landscape.rbモデルでアクセスできない属性として定義されている必要があります。これらの要件は互換性がありますか?フィールドを非表示にして、アクセス可能なままにしておきましょうか。

ご協力いただきありがとうございます !

フレッド

4

1 に答える 1

3

これは、ネストされたリソースの明確なケースのように聞こえます。その中で、生成されたパスヘルパーに親リソースを渡します。

resources :parents do 
  resources :children
end

この場合、次のようなパスヘルパーが作成されます。

new_parent_child_path(@parent)

子コントローラーでは、親オブジェクトは次のようにパラメーターに含まれます。:parent_id

def show
  @parent = Parent.find(params[:parent_id])
  @child = Child.find(params[:id])
end

また、両方のリソースを使用してフォームを作成します

form_for [@parent, @child] do
于 2012-07-23T14:33:18.870 に答える