2016-04-16 1 views
-2

J'ai deux modèles: User et Role. Les attributs de l'utilisateur sont:Affichage des attributs d'une autre table

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

Les attributs de rôle sont:

designer:boolean 
developer:boolean 

Les associations que j'ai ensemble est que l'utilisateur belongs_to rôle et le rôle has_many utilisateurs. Lorsque l'utilisateur s'inscrit, je veux qu'il choisisse son poste (designer ou développeur). Cependant, j'obtiens le role_id en tant que champ entier lorsque je veux afficher les positions (concepteur et développeur) parmi lesquelles choisir. Est-ce que quelqu'un peut m'aider avec cela?

+0

Le bit où vous utilisez: 'admin: boolean',' concepteur: boolean' et 'développeur: boolean' fait vraiment mal aux yeux. Je vous suggère de repenser votre design. – jvillian

Répondre

0

Ce que vous voulez faire s'appelle "Nested Models".

D'abord, vous devez dire au modèle pour permettre à l'autre modèle comme celui-ci:

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

la prochaine chose est à votre avis

#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' 

Maintenant dernier mais bot moins que vous être en mesure de accepter les nouveaux paramètres dans le contrôleur

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 

vous pouvez consulter un exemple d'application https://github.com/mzaragoza/sample_nestes_forms

J'espère que cette aide Happy Hacking