2016-08-29 5 views
0

Прежде всего, я новичок в Rails, поэтому прошу прощения, если это длинный. Я создаю такую ​​работу, как веб-сайт, на котором у него будут два типа пользователей: компании, которые будут размещать рабочие места и охотников за работой, которые смогут подать заявку на них. Поскольку это отношения один-ко-многим, я пытался следовать инструкциям Embedded Ассоциации Railscasts': http://railscasts.com/episodes/189-embedded-association где я сделал:Как назначить ранее существовавшие роли пользователям после регистрации в Rails 4?

Баш:

rails generate migration add_role_to_users role:string 
rake db:migrate 

модели/user.rb

class User < ActiveRecord::Base 
# Include default devise modules. Others available are: 
# :confirmable, :lockable, :timeoutable and :omniauthable 
devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 


    ROLES = %w[admin company user] 

    def role_symbols 
    [role.to_sym] 
    end 
end 

пользователей/new.html.erb:

<p> 
    <%= f.label :role %><br /> 
    <%= f.collection_select :role, User::ROLES, :to_s, :humanize %> 
</p> 

По какой-то причине f.collection_select является п добавление роли в столбец роли в таблице «Пользователь». Когда я перехожу на консоль Rails, только что созданный пользователь присутствует, но роль «nil». Я попытался использовать ролик Rolify, но он не дал много инструкций о том, как добавлять предварительно установленные роли, используя форму. Моя другая мысль заключается в том, что если я создаю модель ролей и добавлю роли там вручную, не все ли записи (роли) будут удалены при загрузке на производство? Итак, мой вопрос:

Я что-то не так с f.collection_select? или есть лучший способ сделать это (без создания таблицы)? или просто лучший способ?

+0

вы позволяя: параметр роли в контроллере? http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html –

+0

также, проверьте перечисления как способ представления значений users.role: http://api.rubyonrails.org/classes/ActiveRecord/Enum. HTML –

ответ

0

Я нашел ответ. Да, мне нужно было разрешить: роль в контроллере, но поскольку я использую программу, все немного отличается от того, чего я не знал. Так вот:

Контроллеры/application_controller.rb

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 
    before_action :configure_devise_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_devise_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:role]) 
    end 
end 

 Смежные вопросы

  • Нет связанных вопросов^_^