0

红宝石版本: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所属的GuestGuest但是,我不确定如何传递resident.idas 值,以及resident.nameas 显示的内容而不做很多丑陋的手动工作。我怎样才能做到这一点?这是我目前的 - 显然不工作 - 代码。

来自 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 回答
1

不确定这是正确的,但你可以试试这个:

<%= f.select :resident_id, options_from_collection_for_select(@residents, :id, :name) %>

此处的文档:http: //guides.rubyonrails.org/form_helpers.html

于 2013-08-28T16:06:05.437 回答