我有这两个模型
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
答案 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