2016-04-16 3 views
-2

У меня есть две модели: User и Role. Атрибуты пользователя:Отображение атрибутов другой таблицы

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

Атрибуты Роль являются:

designer:boolean 
developer:boolean 

Ассоциации, которые я установил, что пользователь belongs_to роль и роль has_many пользователей. Когда пользователь подписывается, я хочу, чтобы он выбрал свою позицию (дизайнера или разработчика). Тем не менее, я получаю role_id как целое поле, когда я хочу отображать позиции (дизайнер и разработчик) на выбор. Может ли кто-нибудь помочь мне в этом?

+0

Бит, где вы используете: 'админ: boolean',' дизайнер: boolean' и 'Разработчик: boolean' действительно делает мои глаза болят. Я предлагаю вам подумать о своем дизайне. – jvillian

ответ

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

Я надеюсь, что это помогает Happy Hacking