我有一个用户模型和一个问题模型。每个用户has_one问题,每个问题属于一个用户。问题模型有3列 - QuestionOne,QuestionTwo和QuestionThree - 每个都设置为字符串“TBD”的默认值。
当用户创建帐户并登录时,我想在他的个人资料中显示问题和回复=“TBD”,然后使用Best,我希望他能够使用编辑和更新操作编辑他的回复。但是我无法使用user.question.questionone
检索问题,因为这里没有创建或新动作,所以它们都是nil。我该怎么做?
答案 0 :(得分:2)
# user.rb
class User << ActiveRecord::Base
has_one :question
after_create :create_question
def create_question
question = self.build_question
question.question_one = question.question_two = question.question_three = "TBD"
question.save
end
end
答案 1 :(得分:1)
创建新用户时,它还没有相关问题,因此您需要以某种方式构建它。常见的方法是使用ActiveRecord回调before_create
或after_create
,类似
# user.rb
class User << ActiveRecord::Base
has_one :question
after_create :create_question
end
答案 2 :(得分:0)
在这里,您可以编写一个迁移,在创建问题时添加默认问题,
class ChangeDefaultQuestions < ActiveRecord::Migration
def self.up
change_column :questions, :question_one, :string, :default => 'What is your name?'
change_column :questions, :question_two, :string, :default => 'How old are you?'
change_column :questions, :question_three, :string, :default => 'Where do you live'
# to add default questions to previously created questions
Questions.update_all({ :question_one => 'your qestion', :question_two => 'your question', :question_three => 'your question' })
end
def self.down
change_column :movies, :rating, :string, :default => nil
Questions.update_all({ :question_one => '', :question_two => '', :question_three => '' })
end
end
我相信它会回答你的问题