我有两个模型(简体)与此类似:关系问题/控制器
食谱(HAS_ONE视频)
- ID
- 名
- descripion
VIDEO(belongs_to recipe)
- ID
- 链接
- recipe_id
在的RecipesController#新我使创建资源视图。 我使用form_for @recipe,与所有常规f.helpers
事情是,我需要一个字段来填写链接属性,并且属于不同的对象(视频)。所以,由于f.helpers前缀与资源[字段]的一切,我用了一个常规的text_field_tag:链接。
到目前为止一切顺利。在的RecipesController#创建我做的:
@recipe = Recipe.new(params[:recipe])
@recipe.video = Video.new(params[:link])
的视频分配到的配方。
在此之后,我做了通常的@ recipe.save,这是我卡住的地方。
我预计如果视频包含任何错误,配方将不会保存,并且我将能够使用@ recipe.errors对象来获取所有错误(来自视频的错误)。
但不仅配方保存,@ recipe.errors不包含来自视频的消息。 我正在使用(部分“错误”,:object => @recipe)列出所有消息,但这不会挑选视频对象触发的消息。
我尝试过各种东西,比如说,里面的部分我有一个条件,最初检查:
if object.errors.any?
object.errors.full_messages ...
end
我换它:
如果(object.errors.merge(对象。 video.errors))。任何? 但它并没有悲伤地工作。
在这种情况下应该怎么做?如何防止@recipe在视频发生错误时保存,以及如何无缝地列出它们?
谢谢!我不知道嵌套的对象形式。这将非常方便,因为我经常会碰到这个问题。 – zyash 2010-11-17 22:45:29
事实上,我遇到了一个小问题,我不太清楚控制器中该做什么,目前看起来像这样:RecipesController#new:@recipe = Recipe.new,RecipesController#create:@recipe = Recipe.new (params [:recipe])... if @ recipe.save ...但它不会在视图中显示嵌套窗体。我在#new部分添加了以下内容:@ recipe.video = Video.new,并将其显示出来,但是当我提交表单时,我没有得到视频的字段:/ – zyash 2010-11-19 17:56:34
糟糕,这是因为在配方模型中,我没有添加:video_attributes to attr_accessible。现在工作正常。再次感谢!! – zyash 2010-11-19 18:05:22