Ruby on rails Rails:使用虚拟属性查找外键id失败

Ruby on rails Rails:使用虚拟属性查找外键id失败,ruby-on-rails,Ruby On Rails,我的应用程序允许用户将主单词表中的单词添加到自己的自定义列表中。因此,单词列表包含多个自定义单词,每个自定义单词都链接到一个主单词 在我看来,我有一个名为word_text(虚拟属性)的字段,允许用户在其中输入一个单词,在我的模型中,我试图查找master_word_id并将其设置在自定义单词表中。我无法访问模型中的@word_文本值。我似乎总是得到一个错误,主单词是必填字段(因为查找失败) class CustomWord

我的应用程序允许用户将主单词表中的单词添加到自己的自定义列表中。因此,单词列表包含多个自定义单词,每个自定义单词都链接到一个主单词

在我看来,我有一个名为word_text(虚拟属性)的字段,允许用户在其中输入一个单词,在我的模型中,我试图查找master_word_id并将其设置在自定义单词表中。我无法访问模型中的@word_文本值。我似乎总是得到一个错误,主单词是必填字段(因为查找失败)

class CustomWord

对于如何正确设置master\u word\u id值的建议,我深表感谢。

有几件事需要解决:

class CustomWord < ActiveRecord::Base
  attr_accessible :master_word_id, :word_list_id, :word_text
  attr_accessor :word_text

  belongs_to :word_list
  belongs_to :master_word
  validates :word_list, presence: true
  #validates :master_word, presence: true <= This will always throw error
  validates :word_text, presence: true
  validates :master_word_id, presence: true

  before_validation :set_master_word

  private 

  def set_master_word
    logger.debug "Received word text #{self.word_text}"
    self.master_word_id = MasterWord.find_by_word_text(self.word_text).id
  end

end
class CustomWord#验证:master\u word,presence:true如果
设置master\u words
的日志显示
@word\u text
为空,我们需要查看如何设置
word\u text
。此外,您不需要在模型中使用
@word\u text
。只要使用
word\u text
.B.T.W-
if@如果@word\u text
,则word\u text.nil?
可以替换为
。而
如果master\u word.nil?
可以替换为
,除非master\u word
谢谢meagar,@user2503775。我做了更改,正如你所看到的,我是Rails的新手。每天学习新的东西!谢谢@CV门。这很有帮助,我现在看到了文字。但是我现在没有看到无效单词的错误消息,并且无效单词的主单词id被设置为nil/null。我如何停止执行并向用户返回错误消息?是的,这使它工作了!谢谢@CV Gate,非常感谢。
class CustomWord < ActiveRecord::Base
  attr_accessible :master_word_id, :word_list_id, :word_text
  attr_accessor :word_text

  belongs_to :word_list
  belongs_to :master_word
  validates :word_list, presence: true
  #validates :master_word, presence: true <= This will always throw error
  validates :word_text, presence: true
  validates :master_word_id, presence: true

  before_validation :set_master_word

  private 

  def set_master_word
    logger.debug "Received word text #{self.word_text}"
    self.master_word_id = MasterWord.find_by_word_text(self.word_text).id
  end

end