我试着拯救我的模型,但没能拯救它。
#starship.rb
class Starship < ApplicationRecord
has_many :crew_members,inverse_of: :starship
accepts_nested_attributes_for :crew_members
has_many :holodeck_programs,inverse_of: :starship
accepts_nested_attributes_for :holodeck_programs
end #crew_member.rb
class CrewMember < ApplicationRecord
belongs_to :starship
accepts_nested_attributes_for :starship
has_many :holodeck_programs,through: :starship
end #holodeck_program.rb
class HolodeckProgram < ApplicationRecord
belongs_to :starship
belongs_to :crew_member
end#controller
def create
#Starship,CrewMember and HolodeckProgram are new via CrewMember.new
@crew_member = CrewMember.new(crew_member_params)
@crew_member.save
.
.
end
.
.
private
def crew_member_params
params.require(:crew_member).permit(:name,:division,:starship_id,
starship_attributes: [:name,:id,
holodeck_programs_attributes: [:title,:starship_id,:crew_member_id]])
end因为在crew_member_id中没有holodeck_programs_attributes,所以会发生验证错误。
我不能使用inverse_of::crew_member,因为在crew_member.rb中通过
我该怎么处理呢?
发布于 2016-11-29 11:18:19
实际上,您可以在创建星际飞船时创建任意数量的crew_members、holodeck_programs。
但是,您正在尝试创建许多星际飞船,holodeck_programs用于单个crew_members,查看
def crew_member_params
params.require(:crew_member).permit(:name,:division,:starship_id,
starship_attributes: [:name,:id,
holodeck_programs_attributes: [:title,:starship_id,:crew_member_id]])
end所以你需要把创建更改为,
def create
@starship = Starship.new(star_ship_params)
@starship.save
end和crew_member_params到
def star_ship_params
params.require(:star_ship).permit(<attributes of star_ship>, holodeck_programs_attributes: [<attributes of holodeck_programs>], crew_members_attributes: [<attributes of crew_members>])
end并确保您已相应地对视图进行了所有更改。
有关嵌套属性及其用法的更多信息,请查看:NestedAttributes。
https://stackoverflow.com/questions/40862452
复制相似问题