0

Target : アイデア モデルのコメントを保存します。

形:

<%= form_for([@idea, IdeaComment.new], :validate => true) do |f| %>
        <div class="control-group">
            <div class="controls">
                <%= f.text_area :text, :placeholder => 'some text', :rows => 5 %>
                <%= validate_errors(IdeaComment.new) %>
            </div>
        </div>
        <%= f.button 'Comment', :class => 'button grad-green', :type => 'submit' %>
    <% end %>

コントローラ:

 @idea_comment = IdeaComment.new(params[:idea_comment])
 ...

しかし、params ハッシュを調べると、次のようになります。 ここに画像の説明を入力

idea_id を「idea_comment」に渡すには?

4

1 に答える 1

5

クライアント側の検証は、リソース指向のフォームと競合しています。代わりに、通常のサーバー側の検証を使用してください。

説明:

リソース指向のフォームは、ネストされたリソースに基づくパスに投稿します。

form_for([@idea, IdeaComment.new]) # => POST '/ideas/[:idea_id]/idea_comments'

:idea_idRailsはリクエスト パスから抽出し、パラメーターとして渡します。アクションではcreate、関連付けは保存前に直接代入によって設定されます。

# controllers/idea_comments_controller.rb
def create
  @idea_comment = IdeaComment.new(params[:idea_comment])
  @idea_comment.idea_id = params[:idea_id]
  # ...
  @idea_comment.save
end

クライアント側の検証の問題は、フォームが割り当てられるまで失敗し、フォームの送信がブロックされることです。これは、フォームが送信される@idea_comment.idea_idまで発生しません。

于 2013-01-19T13:52:42.683 に答える