紅寶石版本一個選擇菜單: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] }