0

ルビーのバージョン: 2.0

レールのバージョン: 4.0

私はこれを複雑にしすぎているかもしれませんが、私は 2 つのコントローラーを持っていますResidentGuest

居住者.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

私がやりたいことは、選択メニューを使用して新しいを作成するときに、ユーザーResidentGuest属するを選択できるようにすることです。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] }

4

2 に答える 2

1

試す@residents = Resident.all.collect {|r| [ r.name, r.id ] }

于 2013-08-28T16:03:50.043 に答える