红宝石版本:2.0
导轨版本:4.0
我可能过于复杂了,但我有 2 个控制器 -Resident
并且Guest
居民.rb
class Resident < ActiveRecord::Base
has_many :guests
end
来宾.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
as 值,以及resident.name
as 显示的内容而不做很多丑陋的手动工作。我怎样才能做到这一点?这是我目前的 - 显然不工作 - 代码。
来自 guest_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] }