2012-06-11 50 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