0

我已将 SessionsController 和 Session Model 重命名为 Periods/Period,因为它与 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 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"))

在 Sessions 控制器的create操作中,像这样构建关联:

@session.event = Event.find(params[:event][:id])
于 2012-08-07T18:38:58.353 回答
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等等......

于 2014-09-12T05:26:06.287 回答