0

所以我有一个嵌套资源

resources :albums do 
  resources :elements
end

我可以更新、删除和查看这些元素。我不能真正做的是创建一个新元素。所以它实际上是在数据库中创建的,而不是在映射表中。楷模:

班级专辑:

has_many :elements, :through => :albums_elements      
has_many :albums_elements

类元素:

has_many :albums_elements
has_one  :album, :through => :albums_elements

类专辑元素:

belongs_to :album
belongs_to :element

在元素控制器中,我有:

def create
@element = Element.new(params[:element])
@album   = Album.find(params[:album_id])
respond_to do |format|
  if @element.save
    format.html { redirect_to album_elements_path(@album), :notice => 'Element was successfully created.' }
    format.json { render :json => @element, :status => :created, :location => @element }
  else
    format.html { render :action => "new" }
    format.json { render :json => @element.errors, :status => :unprocessable_entity }
  end
end
end

正如我所说,当我按下表单中的创建按钮时,该元素正在表“元素”中正确创建,但未插入到“albums_elements”中。我在这里看到了一个类似的帖子,作者被告知要修复他的依赖项。但是我没有看到地雷有错误?我如何告诉 rails 插入两个表?元素和专辑元素?

4

1 回答 1

0

请你把你的@element@albumelements_controller课堂上联系起来检查一下吗?就像你已经拥有

@element = Element.new(params[:element])
@album   = Album.find(params[:album_id])

只需添加

@element.album = @album

现在@element.save也应该在您的关系表中插入一个条目。

让我知道它是否有效。我只是看了一眼问题后才回答的。

说明:

我将尝试为您制作一个示例应用程序。但在此之前,我需要了解更多。

  • Album似乎和之间的关系Elementone-to-many,那你为什么用has_many :through?它可以是简单Album: has_many :products的和Product: belongs_to :album

  • 如果必须使用关系表,它是否还有其他属性?

  • 如果我提供任何解决方案可以one-to-many吗?

我会尽力为您提供最好的 rails 方法来尽快保存这些条目。谢谢

于 2012-10-10T10:03:03.370 回答