显示另一个表的属性



我有两个模型:UserRole。用户属性为:

name:string
email:string 
admin:boolean 
role_id:integer

角色属性为:

designer:boolean 
developer:boolean

我设置的关联是用户belongs_to角色和角色has_many用户。当用户注册时,我希望他选择自己的职位(设计师或开发人员)。然而,当我想显示可供选择的职位(设计师和开发人员)时,我会将role_id作为Integer字段。有人能帮我吗?

您想要做的叫做"嵌套模型"。

首先,你必须告诉模型允许其他模型这样做:

# app/model/user.rb
class User < ActiveRecord::Base
  belongs_to :role
  accepts_nested_attributes_for :role
end

下一件事在你看来是

#app/views/users/new.html.ham
= simple_form_for @user do |f| 
  = f.input :name
  = f.input :email
  %br
  = f.simple_fields_for :role do |role|
    = role.input :designer
    = role.input :developer
  = f.button :submit, "Send Message", :class => 'btn btn-primary btn-block'

现在最后但最不重要的是,你可以接受控制器中的新参数

class UsersController < ApplicationController
  expose(:users){User.all.order(:id)}
  expose(:user, attributes: :user_params)
  def new
    @user = User.new
    @user.role.build
  end
  def create
    if user.save
      flash[:notice] = t(:user_was_successfully_created)
      redirect_to root_path
    else
      render :new
    end
  end
  private
  def user_params
    params.require(:user).permit(
      [
        :email ,
        :name ,
        role_attributes: [
          :designer,
          :developer,
        ]
      ]
    )
  end
end

你可以查看一个示例应用程序https://github.com/mzaragoza/sample_nestes_forms

我希望这能有所帮助Happy Hacking

最新更新