2012-06-11 112 views
0

我有兩個型號:Rails的形式,通過用戶名字段獲得用戶ID

第一種模式:

class Url < ActiveRecord::Base 
    attr_accessible :code, :target, :user_id, :user 
    belongs_to :user, :dependent => :destroy 
end 

軌控制檯

1.9.3p125 :001 > Url 
=> Url(id: integer, user_id: integer, code: string, target: string, created_at: datetime, updated_at: datetime) 

第二種模式:

class User < ActiveRecord::Base 
    attr_accessible :description, :status, :username 
    has_many :urls 

    validates :username, 
    :presence => true, 
    :uniqueness => true 

    def to_s 
    username 
    end 
end 

導軌控制檯

1.9.3p125 :002 > User 
=> User(id: integer, username: string, status: integer, description: text, created_at: datetime, updated_at: datetime) 

現在我有一個表格,用於創建網址:

<%= form_for(@url) do |f| %> 
    <% if @url.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= @url.errors.count %> Error(s):</h2> 

     <ul> 
     <% @url.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :user_id %><br /> 
    <%= f.text_field :user_id %> 
    </div> 

    <div class="field"> 
    <%= f.label :code %><br /> 
    <%= f.text_field :code %> 
    </div> 
    <div class="field"> 
    <%= f.label :target %><br /> 
    <%= f.text_field :target %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

爲了增加用戶友好性我想與現場的用戶名交換領域USER_ID。需要採取哪些步驟?

謝謝!

回答

2

您可以使用collection_select助手顯示一個選擇框包含您的用戶:

<%= f.collection_select(:user_id, User.all, :id, :username, :prompt => true) %> 

這使得類似:

<select name="url[user_id]"> 
    <option value="">Please select</option> 
    <option value="1">One User</option> 
    <option value="2">Another User</option> 
    <option value="3">...</option> 
</select> 
+0

謝謝!這對我很好。但是對於成千上萬的用戶來說,必須有更好的解決方案,或者? – Heiko

+0

我會使用某種自動完成。只需谷歌[軌3自動完成](http://www.google.com/search?q=rails+3+autocomplete)。 – Stefan