принимает вложенные атрибуты с 2 вложенными таблицами
Я новичок в Ruby on rails и создаю простой веб-сайт. Я обнаружил, что рельсы 3 используют attr_accessible
, а рельсы 4 используют strong parameters
. В настоящее время я работаю с rails 4. Я не совсем уверен, как настроить accepts_nested_attributes_for
.
Вот что у меня есть
Модель пользователя:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:rememberable, :validatable
has_many :expense_pictures
has_many :income_pictures
accepts_nested_attributes_for: ExpensePicture ?
accepts_nested_attributes_for: IncomePicture ?
end
Модель расходов:
class ExpensePicture < ActiveRecord::Base
belongs_to :user
mount_uploader :image, ImageUploader
end
Модель ExpenseText:
class ExpenseText < ActiveRecord::Base
belongs_to :expense_pictures
end
Модель IncomePicture:
class IncomePicture < ActiveRecord::Base
belongs_to :user
mount_uploader :image, ImageUploader
end
Модель IncomeText:
class IncomeText < ActiveRecord::Base
belongs_to :income_pictures
end
Мой пользовательский контроллер
class UserController < ApplicationController
def create
User.create(user_params)
accepts_nested_attributes_for :IncomePicture ?
accepts_nested_attributes_for :ExpensePicture ?
end
private
def user_params
# required input for params
# permit - returns a version of the params hash with ony the permitted attributes
params.require(:user).permit(:name, :email, :password, :password_confirmation, ...not sure...)
end
Конец
1 ответ:
Используя
accepts_nested_attributes_for
дляhas_many relation
с вашими моделями, ВашаUser
модель должна выглядеть следующим образомclass User < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :rememberable, :validatable has_many :expense_pictures has_many :income_pictures accepts_nested_attributes_for :expense_pictures accepts_nested_attributes_for :income_pictures end
Ваши
new
иcreate
методы usercontroller должны выглядеть следующим образомdef new @user = User.new @user.expense_pictures.build @user.income_pictures.build end def create @user = User.new(user_params) if @user.save redirect_to @user else render 'new' end end
И ваш
user_params
метод должен выглядеть примерно такdef user_params params.require(:user).permit(:name, :email, :password, :password_confirmation, expense_pictures_attributes: [:your_attr1,:your_attr2,..],income_pictures_attributes: [:your_attr1,:your_attr2,..]) end
Не стесняйтесь спрашивать, хотите ли вы получить дополнительную информацию по этому вопросу.