我有一个模特
class Card < ActiveRecord::Base
belongs_to :CardColour
validates :CardColour, presence:true
在控制台中输入
@a = Card.new(:card_colour_id =1)
然而它无效。我问为什么,做@ a.errors,控制台告诉我
=> #<ActiveModel::Errors:0x000000052e57e8 @base=#<Card id: nil, card_colour_id: 1>, @messages={:CardColour=>["can't be blank"]}>
我花了好几个小时看着这个,我完全感到困惑,并且在我的智慧结束时为什么我似乎无法在Rails中做最简单的事情。
我查找了类似标题的问题,但它们似乎都是更复杂的场景。我比这个例子更多,但没有更复杂的。例如,我实际上设置了3个外键,并且它们都告诉我它们不能为空,即使它们填充了有效值。
我发现this answer表明我的代码是正确的,并且实际上会执行我想要的操作(即验证card_colour_id链接到CardColour模型中的实际对象)。
答案 0 :(得分:1)
您正在验证CardColour
,但在您的控制台中,您使用Card
创建了一个新card_colour_id
,但未使用CardColour
。这就是你得到错误的原因。
您应该将validates :CardColour, presence :true
更改为validates :your_model's_column, presence :true
答案 1 :(得分:0)
请将您的型号代码更改为
class Card < ActiveRecord::Base
belongs_to :card_colour
validates :card_colour_id, presence:true
和您的新卡片行
@a = Card.new(:card_colour_id => 1)
或使用新语法
@a = Card.new(card_colour_id: 1)