首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails has_many通过保存失败

Rails has_many通过保存失败
EN

Stack Overflow用户
提问于 2016-11-29 09:42:42
回答 1查看 72关注 0票数 0

我试着拯救我的模型,但没能拯救它。

代码语言:javascript
复制
 #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
代码语言:javascript
复制
 #crew_member.rb

 class CrewMember < ApplicationRecord
   belongs_to  :starship
   accepts_nested_attributes_for :starship
   has_many :holodeck_programs,through: :starship
 end
代码语言:javascript
复制
 #holodeck_program.rb

 class HolodeckProgram < ApplicationRecord
   belongs_to :starship
   belongs_to :crew_member
 end
代码语言:javascript
复制
#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中通过

我该怎么处理呢?

EN

回答 1

Stack Overflow用户

发布于 2016-11-29 11:18:19

实际上,您可以在创建星际飞船时创建任意数量的crew_members、holodeck_programs。

但是,您正在尝试创建许多星际飞船,holodeck_programs用于单个crew_members,查看

代码语言:javascript
复制
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

所以你需要把创建更改为,

代码语言:javascript
复制
def create
  @starship = Starship.new(star_ship_params)
  @starship.save
end

和crew_member_params到

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40862452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档