我已将SessionsController和会话模型重命名为句点/期间,因为它与Devise冲突,因此您会在更新中看到此内容
我有一个会话和事件模型/控制器。创建新会话时,需要将其与特定事件相关联。
在我的会话模型中,我有一个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 method
merge'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
我这样做是否正确?
答案 0 :(得分:1)
要显示包含其他型号(而非其他控制器)选项的选择菜单,请尝试collection_select。
在新的会话表单中,这可能如下所示:
collection_select(:event, :id, Event.where("date > :date", date: Time.now.strftime("%m/%d/%Y"))
在Sessions控制器中,在create
操作中,构建如下关联:
@session.event = Event.find(params[:event][:id])
答案 1 :(得分:0)
我发现这个结构适合我:
<%= f.label :event %>
<%= f.collection_select :event_id, Event.all, :id, :name, {:prompt=> "Pick an Event"}, {:class => "form-control"} %>
最后一点是我用来设置Bootstrap类的html部分。
:name
此处可以是:date
或:street
等...