0

Devise と競合したため、SessionsController と Session Model の名前を Periods/Period に変更しました。

セッションとイベントのモデル/コントローラーがあります。新しいセッションが作成されたら、特定のイベントに関連付ける必要があります。

私のセッション モデルには event_id がありますが、過去のイベントの名前が入力されたフォームにドロップダウンが必要です。それが選択されると、フォームは作成されたセッションに正しい event_id を割り当てることができるはずです。

これを行う正しい方法は何ですか?

モデルがどのように見えるかをより明確に把握するのに役立つ私の schema.rb を次に示します。

ActiveRecord::Schema.define(:version => 20120807154707) do

  create_table "events", :force => true do |t|
    t.string   "name"
    t.date     "date"
    t.string   "street"
    t.string   "city"
    t.string   "state"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

  create_table "sessions", :force => true do |t|
    t.string   "name"
    t.integer  "event_id"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
  end

  create_table "users", :force => true do |t|
    t.string   "email",               :default => "",    :null => false
    t.string   "encrypted_password",  :default => "",    :null => false
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",       :default => 0
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.datetime "created_at",                             :null => false
    t.datetime "updated_at",                             :null => false
    t.boolean  "admin",               :default => false
  end

  add_index "users", ["email"], :name => "index_users_on_email", :unique => true

end

ここに私のフォームがあります:

<%= form_for(@period)  do |f| %>


  <%= f.label :Name %>
  <%= f.text_field :name%>

  <%= f.label :Event %>
  <%= f.collection_select(:period, :event_id, Event.all, :id, :name)%>


  <%= f.label :time %>
  <%= f.text_field :time, id: "timepicker" %>

  <%= f.submit "Create Event" %>

<% end %>

そして、次のエラーが発生し続けます: undefined methodmerge' for :name:Symbol`

コレクション選択のさまざまな引数を分割します。f.collection_select(:period, :event_id, Event.all, :id, :name)

:period -> The object
:event_id -> the method I want to set on the object.
Event.All -> The collection (for now I'll take all of them)
:id -> the value of the html element option
:name -> the value displayed to the user

私はそれを正しくやっていますか?

4

2 に答える 2

1

別のモデル (別のコントローラーではない) からのオプションを含む選択メニューを表示するには、collection_selectを試してください。

新しいセッション フォームでは、次のようになります。

collection_select(:event, :id, Event.where("date > :date", date: Time.now.strftime("%m/%d/%Y"))

セッション コントローラのcreateアクションで、次のように関連付けを作成します。

@session.event = Event.find(params[:event][:id])
于 2012-08-07T18:38:58.353 に答える