添加/删除模型关系的最简单方法

时间:2012-06-21 00:15:55

标签: ruby-on-rails activerecord form-for

我想知道对我的模型进行小更新的最佳方法是什么。我的意思是我希望有一个按钮通过has_many:through关系创建或破坏我的两个模型之间的关系。所以我有用户,Dvds,队列和DvdQueues。

我想在很多页面上添加一个简单的按钮,点击后,将Dvd添加到用户队列。完成此任务的最佳方法是什么?我应该在每个页面上加载一个简单的表单吗?我应该将按钮链接到处理它的控制器操作吗?如果我使用表单,我是否需要嵌套属性?

谢谢!

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用单独的控制器为DvdQueues创建/销毁操作,然后在视图中使用link_to与the Rails javascript-helper :method(:post |:delete in this case)

例如:

class DvdQueuesController < ApplicationController
  def create
    # params[:dvd_queue] = {"dvd_id": x, "queue_id": y}
    @user.dvd_queues.create params[:dvd_queue]
    redirect_to dvds_path
  end

  def destroy
    dvd_que = @user.dvd_queues.find_by_id params[:id]
    dvd_que.destroy
    redirect_to dvds_path
  end
end

module DvdQueuesHelper
  def link_to_add_or_remove_from_queue(dvd, text)
    if @user.dvd_queues.exists? :dvd_id => dvd.id
      link_to text, dvd_queues_path(dvd.id), :method => :delete
    else
      link_to text, dvd_queues_path, :method => :post
    end
  end
end

答案 1 :(得分:0)

您可以向必要的控制器添加操作add_dvd,并使用button_todoc)帮助程序。你也可以使用ajax。只需将remote: true选项添加到按钮并使用add_dvd并处理您的回复:)