-1

我有这两个模型

def School
  attr_accesible :user_id
  belongs_to :user
end

def User
  attr_accesible :name
  has_one :school
end

我想在活动管理员中创建一所新学校,但是当我应该选择一个用户时,我想显示现有用户的姓名而不是 ID。我怎样才能做到这一点?

  form do |f|
    f.inputs "School" do
      f.input :name
      f.input :user_id # ???
    end
    f.buttons
  end
4

2 回答 2

1

像这样尝试:(我希望你在 School 模型中拥有多个属性)

<%= form_for(@school), do |f| %>
   <%= f.select :user_email, @users_without_schools %>
   <%= f.submit "Create new school" %>
<% end %>

在您呈现此表单的控制器操作中:

@school = School.new
@users_without_schools = User.all.map { |user| user.email if user.school.nil? }

在你的创建动作中

@user = User.find_by_email(params[:user_email])

对于 user_mail,创建一个虚拟属性:

http://railscasts.com/episodes/16-virtual-attributes

因此,在您的情况下,您的 setter 方法将类似于:

Class School < ActiveRecord::Base

   def user_email=(email)
      user = User.find_by_email(email)
      self.user_id = user.id
   end

end
于 2013-03-17T14:52:38.057 回答
0
  form do |f|
    f.inputs "School" do
      f.input :name
      f.input :user_id, as: :select, collection: User.all
    end
    f.buttons
  end

这并不难:(。

在模型/user.rb 中

def to_s
  self.first_name + " " + self.last_name 
end
于 2013-03-17T15:09:13.403 回答