ルビーのバージョン: 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
値として渡す方法とresident.name
、多くの醜い手動作業を行わずに表示されるものを渡す方法がわかりません。どうすればこれを達成できますか?これが私の現在の-明らかに機能していない-コードです。
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] }