显示另一个表

时间:2016-04-16 09:13:30

标签: ruby-on-rails ruby ruby-on-rails-4 rails-4-2-1

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

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

角色属性是:

designer:boolean 
developer:boolean

我设置的关联是用户belongs_to角色和角色has_many用户。 当用户注册时,我希望他选择自己的位置(设计师或开发人员)。但是,当我想显示可供选择的位置(设计者和开发者)时,我将role_id作为整数字段。任何人都可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您想要做的是“Nested Models”。

首先,您必须告诉模型允许其他模型:

# 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

我希望这会有所帮助 快乐黑客