我正在使用simple_form,我有一个包含 3 个值的选择菜单,这些值被打印到索引中。我想知道获取用户设置的值的正确和最佳方法,然后计算当前 3 个不同选项中有多少个。
我是 ruby 的新手,所以这是一个很大的学习曲线,任何帮助将不胜感激。
在我的_form.html.erb
<%= f.input :menu, :as => :select, :collection => [ "Chocolate", "Cake", "Custard"] %>
我的索引.html.erb
<td><%= reply.menu %></td>
.db
class CreateReplies < ActiveRecord::Migration
def change
create_table :replies do |t|
t.string :name
t.integer :menu
t.boolean :rsvp, :default => false
t.timestamps
end
end
end
- 您希望建立多对一关系(对一个菜单进行多次回复)
- 将迁移更改为 t.integer :menu_id
- 创建另一个名为 Menu 的模型,其中包含 和 id 和 即名称。
因此,请使用如下所示的内容:
# == Schema Information
#
# Table name: replies
#
# id :integer not null, primary key
# menu_id :integer
# ...
# created_at :datetime not null
# updated_at :datetime not null
class Reply < ActiveRecord::Base
attr_accessible :menu_id, etc.
belongs_to :menu, :inverse_of => :replies # belongs_to because has the FK
...
end
# == Schema Information
#
# Table name: menus
#
# id :integer not null, primary key
# name :string(255)
# created_at :datetime not null
# updated_at :datetime not null
class Menu < ActiveRecord::Base
attr_accessible :name
has_many :replies, :inverse_of => :menu, :dependent => :nullify # the FK is in the reply
accepts_nested_attributes_for :replies
end
然后,由于您使用的是SimpleForm:
<%= f.association :menu, :collection => Menu.all, :prompt => "- Select -"%>
然后,其他所有内容在很大程度上都是自动的(即,当您创建/更新回复时,它将获取已发布的menu_id并相应地分配它。
如果我是你,我会深入研究 http://ruby.railstutorial.org/。这是一个很好的资源。
更新:忘记了视图显示(如果您尝试显示所选菜单的名称 - 如果您尝试显示整个菜单,那是完全不同的情况):
<td><%= @reply.menu.name %></td>