2017-02-20 7 views
1

У меня есть модель городаКак работать с несколькими вариантами с помощью Devise и Rails?

class City < ActiveRecord::Base 
    belongs_to :country 
end 

И я также использую стандартный Придумайте камень для регистрации пользователя и входа в систему. Теперь я хочу, чтобы каждый пользователь имел несколько стран при редактировании своей учетной записи. Я добавил дополнительный параметр (city_ids) в виде массива Разрабатывают модели пользователя

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_permitted_parameters, if: :devise_controller? 

    protected 


    def configure_permitted_parameters 
     devise_parameter_sanitizer.permit(:sign_up,  keys: [:first_name, :last_name, :email, :password, :password_confirmation]) 
     devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name, :email, :password, :password_confirmation, :current_password, 
city_ids: []]) 
    end 
end 

И я также изменил мой шаблон для работы с ним

<div class="field"> 
    <%= f.label :city_ids %><br /> 
    <%= f.select :city_ids, City.all.collect {|x| [x.name, x.id]}, {}, :multiple => true %> 
    </div> 

Но не записывает значения в массив.

ответ

0

Просто добавьте has_many :countries в модель пользователя и добавьте соответствующий внешний ключ в свою базу данных. Посмотрите Ruby on Rails Guide, вы найдете всю информацию, вам нужно

Модели

class User < ActiveRecord::Base 
    has_many :countries 

    devise :database_authenticatable, :registerable, 
      :recoverable, :rememberable, :trackable, :validatable 

    attr_accessible :email, :password, :password_confirmation 
end 

class Country < ActiveRecord::Base 
    belongs_to :user 
    has_many :cities 
end 

class City < ActiveRecord::Base 
    belongs_to :country 
end