0

ユーザーにイベントを作成してもらいたいのですが、このイベントでは、ユーザーがイベントに「登録」するための動的フォームフォームを作成できる必要があります(その場でフィールドを作成します)。このフォームに送信されたデータは、データベースに保存されます。このチュートリアルのほとんどを使用して、現在の場所に到達しました。

私の構造はこれまでのところ次のようになっています。

class Admin::Event < ActiveRecord::Base
  attr_accessible :body, :date, :title, :end_date, :status, :event_location_id, :payment, :fields_attributes, :answers

  belongs_to :event_location

  has_many :fields, class_name: "Admin::EventField"
  has_many :event_surveys
  accepts_nested_attributes_for :fields, allow_destroy: true

end

admin_event_fields テーブルに格納されるイベントに対してフィールドを動的に作成することに成功しました。Rails Cast チュートリアルとまったく同じ方法で実行します。

class Admin::EventField < ActiveRecord::Base
  belongs_to :event
  attr_accessible :field_type, :name, :required
end

次に、このモデルがあります。私の考えは、回答をハッシュに保存することです。そのため、あるユーザーが「調査」を送信すると、それは admin_event_id に対して保存され、回答は回答ハッシュに保存されます。これは、別のユーザーが回答を送信したときに繰り返されるはずです... 私の問題は、回答を Admin::EventSurvey に保存することです... これを行う論理的な方法がわかりません。

class Admin::EventSurvey < ActiveRecord::Base
  attr_accessible :admin_event_id, :answers

  has_one :admin_event, :class_name => "Admin::Event"
  accepts_nested_attributes_for :admin_event, :allow_destroy => true

  serialize :answers, Hash
end

フォームは show アクションから送信可能になるため、show.html.erb にフォームを配置しました。

管理者::イベント コントローラ:

  # Admin::EventsController 

  # GET /events/1
  # GET /events/1.json
  def show
    @event = Admin::Event.find(params[:id])
    @event_survey_answer = Admin::EventSurvey.new(admin_event_id: params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @event }
    end
  end

Show.html.erb:

<%= form_for @event_survey_answer do |f| %>
<% if @event_survey_answer.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@event_survey_answer.errors.count, "error") %> prohibited this event_survey_answer from being saved:</h2>

      <ul>
      <% @event_survey_answer.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <% f.fields_for :admin_event do %>
    <%= @event.fields.each do |field| %>
        <%= render "admin/events/fields/#{field.field_type}", locals: { field: field, f: builder }  %>
    <% end %>
  <% end %>


  <%= f.submit %>
<% end %>

上記のエラーが発生した時点で、@event.fields のループが原因でこのエラーが発生しています。

undefined local variable or method `builder' 
4

0 に答える 0