6

エラーが発生します

ActionView::Template::Error (undefined method `values_at' for nil:NilClass):

ネストされたフォームgemを使用する場合

これが私のコードです

モデル

class Poll < ActiveRecord::Base

  attr_accessible :question, :poll_answers_attributes
  has_many  :poll_answers
  accepts_nested_attributes_for :poll_answers
end

class PollAnswer < ActiveRecord::Base
  belongs_to  :poll
  attr_accessible :answer
end

意見

 =nested_form_for [:admin, @poll], mutipart: true, class: "form-horizontal" do |f|
    .span6
      .control-group
        =f.label :question, class: "control-label"
        .controls
          =f.text_field :question, rows: "5", class: "span5"
      = f.link_to_add "Add a Answer", :poll_answers
      =f.submit "Create Post", class: "btn btn-primary"

スタックトレース

/home/abid/.bundler/ruby/1.9.1/nested_form-6232dd853c27/lib/nested_form/builder_mixin.rb:41:in `block in link_to_add'
/home/abid/.bundler/ruby/1.9.1/nested_form-6232dd853c27/lib/nested_form/view_helper.rb:53:in `call'
/home/abid/.bundler/ruby/1.9.1/nested_form-6232dd853c27/lib/nested_form/view_helper.rb:53:in `after_nested_form_callbacks'
/home/abid/.bundler/ruby/1.9.1/nested_form-6232dd853c27/lib/nested_form/view_helper.rb:8:in `block in nested_form_for'

何か案は ?

4

2 に答える 2

13

ネストされたフォームgemのドキュメントに記載されているように、link_to_loadボタンの前にネストされたオブジェクトのfield_forについて言及する必要があります。私は以前にこの宝石を使用したことがありませんが、ドキュメントを読んだ後、私はこれを推測しています。

ここでのフォームは次のようになります

<%= nested_form_for [:admin, @poll], mutipart: true, class: "form-horizontal" do |f| %>
  <%= f.text_field :question %>
  <%= f.fields_for :poll_answers do |poll_ans_form| %>
    <%= poll_ans_form.text_field :name %>
    <%= poll_ans_form.link_to_remove "Remove this task" %>
  <% end %>
  <p><%= f.link_to_add "Add a Answer", :poll_answers %></p>
<% end %>
于 2013-03-22T18:22:06.947 に答える
1

このタイプのネストされたフォームを実行するには、simple_formを確認する必要があります。それはそれをかなり簡単にします。投稿したモデルに基づいて、次のようなものが機能するはずです。

# controller
  def new
    @poll = Poll.new
  end

# new.html.erb
<%= simple_form_for @poll do |f| %>
  <%= f.simple_fields_for :poll_answer do |l| %>
    <%= l.input :answer, autofocus: true %>
    <%= l.submit "Add", class: 'small round button' %>
  <% end %>
<% end %>

ルートを開いている場合は、その投稿がpoll#createコントローラーに送信されます。そこから、ロジックを処理できます。

お役に立てば幸いです。

于 2013-03-22T15:39:30.537 に答える