Ruby版本:2.0
Rails版本:4.0
我可能会因此而复杂化,但我有2个控制器 - Resident
和Guest
resident.rb
class Resident < ActiveRecord::Base
has_many :guests
end
guest.rb
class Guest < ActiveRecord::Base
belongs_to :resident
end
来宾迁移
class CreateGuests < ActiveRecord::Migration
def change
create_table :guests do |t|
t.string :name
t.string :phone_number
t.integer :resident_id
t.belongs_to :resident
t.timestamps
end
end
end
我想要做的是允许用户在使用选择菜单创建新Resident
时选择Guest
所属的Guest
。但是,我不知道如何将resident.id
作为值传递,而resident.name
如果没有做很多丑陋的手工工作则显示。我怎样才能做到这一点?这是我目前的 - 显然不起作用 - 代码。
片段
# GET /guests/new
def new
@guest = Guest.new
@residents = Resident.all
end
/views/guests/_form.html.erb
<%= form_for(@guest) do |f| %>
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :phone_number %><br>
<%= f.text_field :phone_number %>
</div>
<div class="field">
<%= f.label :resident_id %><br>
<%= f.select :resident_id, @residents,
prompt: "select a resident" %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
更新:问题已解决
泰勒和杰森都是正确的一半,但我给了泰勒“接受的答案,因为他离我更近了。”我最终在控制器中使用此行解决了我的问题:
@residents = Resident.all.map { |resident| [resident.name, resident.id] }
答案 0 :(得分:1)
尝试@residents = Resident.all.collect {|r| [ r.name, r.id ] }
答案 1 :(得分:1)
不确定这是对的,但你可以试试这个:
<%= f.select :resident_id, options_from_collection_for_select(@residents, :id, :name) %>