我可以在没有new和create操作的情况下设置默认值,并使用编辑和更新操作直接编辑它吗?

时间:2013-01-02 07:34:13

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我有一个用户模型和一个问题模型。每个用户has_one问题,每个问题属于一个用户。问题模型有3列 - QuestionOne,QuestionTwo和QuestionThree - 每个都设置为字符串“TBD”的默认值。

当用户创建帐户并登录时,我想在他的个人资料中显示问题和回复=“TBD”,然后使用Best,我希望他能够使用编辑和更新操作编辑他的回复。但是我无法使用user.question.questionone检索问题,因为这里没有创建或新动作,所以它们都是nil。我该怎么做?

3 个答案:

答案 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_createafter_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

我相信它会回答你的问题