我与导轨5.1.2和Ruby 2.2.6工作Ruby on Rails的:在数组初始化
我有以下类别:
class Idea < ApplicationRecord
validates :title, presence: true
validates :description, presence: false
has_many :discussions
end
class Discussion < ApplicationRecord
validates :title, presence: true
belongs_to :idea
def initialize(title)
@title = title
end
end
在idea
创作,我想在属性discussions
中添加默认discussion
。由于我是红宝石和Rails的新手,我不知道哪种方法可以做到这一点。这是我尝试失败的原因。
在思想控制,我试过在idea
创建,以创建默认discussion
,如下所示:
class IdeasController < ApplicationController
def create
discussion = Discussion.new "Main thread"
@idea = Idea.new(idea_params)
@idea.discussions << discussion
@idea.save
redirect_to ideas_path
end
private
def idea_params
params.require(:idea).permit(:title)
end
end
这驱使我在控制器中的错误:
undefined method `<<' for nil:NilClass
上line
@idea.discussions << discussion
我认为这是由于uninit在我的idea
中ialized discussions
阵列。但是,指南指出,具有声明has_many
的任何类将继承方法<<
,如this guide中所述。但是,也许这是唯一的想法被保存至少一次后?
我尝试手动初始化我的控制器中的数组。
@idea.discussions = []
这有助于消除错误,但我很惊讶这不会自动完成。此外,discussion
未保存在数据库中。我尝试添加的声明autosave
的理念类,有没有效果:
has_many :discussions, autosave: true
我一点点丢失。最后,我只想在其创建和保存之间添加一个discussion
,并将其保存在idea
之间。什么是最好的方法?
感谢您的任何帮助。
听起来很不错。现在,我面临另一个问题:**未定义的方法'build_discussion'为# **。 –
'build_xxx'用于'has_one'关系,而不是'has_many'。 –
您可能还需要在Discussion模型中添加'accept_nested_attributes_for:idea'。有关更多详细信息,请参见https://www.pluralsight.com/guides/ruby-ruby-on-rails/ruby-on-rails-nested-attributes。 –