2013-08-28 19 views
0

红宝石版本一个选择菜单:2.0抓住名称和ID从另一个控制器Rails中

Rails的版本:4.0

我可能已经过去复杂,但我有2个控制器 - ResidentGuest

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 

我想这样做是允许用户选择ResidentGuest属于创建一个新的时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] }

回答

1

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

相关问题