初心者として、親アイテムを表示するときに子アイテムを作成するためのベストプラクティスを探していました。私は多くの説明を見つけましたが、かなり不完全で、私にはわかりません。誰かがベストプラクティスの完全な実装を説明できますか?包含と宣言を作成parent_item
してchild_item
モデル化しました。リンクされた(手動で作成された)リストを「表示」ビューに表示できます。has_many
belongs_to
child_items
parent_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モデルでアクセスできない属性として定義されている必要があります。これらの要件は互換性がありますか?フィールドを非表示にして、アクセス可能なままにしておきましょうか。
ご協力いただきありがとうございます !
フレッド