红宝石版本一个选择菜单:2.0抓住名称和ID从另一个控制器Rails中
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
guest虚拟机迁移
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
作为显示没有做很多丑陋的手工工作。我怎样才能做到这一点?这里是我目前的 - 显然不工作的代码。
从guests_controller.rb片段
# 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] }