0

我有一个存储产品的应用程序(从文件中读取它们,没有给出来自 html 的用户输入)。问题是该产品将有一个发件人。发件人可以是一个或多个对该产品感兴趣的人。现在在我的产品的索引页面上,我有 2 个基本操作,“显示/编辑/销毁”。我想再添加一个操作“添加发件人”,将发件人添加到特定产品。我理解它背后的逻辑,我遇到的问题是语法,因为我是 Rails 新手。

我的产品型号:

class Product < ActiveRecord::Base
  attr_accessible :name, :price

   #relationships !
   has_many :senders,  dependent: :destroy #also destroys the senders when product deleted!
end

我的发件人模型

class Sender < ActiveRecord::Base
  attr_accessible :application_id, :email, :name

  belongs_to :product
end

我也有这个迁移来表明关系

class CreateSenders < ActiveRecord::Migration 
  def change
    create_table :senders do |t|
      t.integer :product_id
      t.string :name
      t.text :email 

      t.timestamps
    end
    add_index :senders, [:product_id, :created_at]
  end 
end

现在我正在考虑创建一个自定义路由,它“位于”“添加发件人”链接后面,并采用“当前”产品的 id。然后我以某种方式创建一个发件人

product.sender.create/add(user_id??)

请问有什么帮助/指导吗?

4

1 回答 1

0

您是否使用宁静路由,如果是,您是否考虑过使用嵌套资源?如果您不使用 RESTful 路由,我肯定会看看它,因为这与您在这里寻找的完全一样。下面的所有内容都假设您使用的是 restful 路由方法,因为它是 Rails 的默认设置,并且非常适合您的用例。

rails 路由的嵌套资源选项允许您在现有路由集下添加一组静态路由,其中​​新的路由集与属于父资源的资源有关。

在这种情况下,发件人将是您的嵌套资源,通过在您的路由中进行设置,您可以创建一个单独的发件人控制器(就像您创建产品控制器一样)来管理它们的创建/删除/等。与简单 CRUD 控制器的唯一区别在于,在您的 senders 控制器中,您可能必须加载产品和发送者(如果您需要访问产品,例如,如果您正在对其进行验证)。可以从路线中的 ID 加载产品(上面的链接都涵盖了这一点)。

如果您只需要几个安静的路线(创建/删除但不是索引/显示),您也可以控制它(更多信息在这里):

resources :senders, :only => [:new, :create, :destroy]
于 2012-08-24T16:47:25.610 回答