active_admin中的表单显示名称,而不是具有has_one关联的id

时间:2013-03-17 11:11:41

标签: ruby-on-rails ruby-on-rails-3

我有这两个模型

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

2 个答案:

答案 0 :(得分:1)

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

<%= 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

答案 1 :(得分:0)

  form do |f|
    f.inputs "School" do
      f.input :name
      f.input :user_id, as: :select, collection: User.all
    end
    f.buttons
  end

不是那么难:(。

在model / user.rb中

def to_s
  self.first_name + " " + self.last_name 
end