ruby-on-rails - 将产品标记为已消耗,Rails 方式?

标签 ruby-on-rails ruby ruby-on-rails-3.2

今天我正在尝试实现以下内容:

站内有产品,有用户。 如果用户已登录(如果是 current_user),他可以标记产品,就像他正在消费该产品一样。稍后他可以单击一个按钮,并将其从消耗的按钮中删除。

我正在为此苦苦挣扎:

路线.rb

resources :users do
    member do
        get :product_add
        get :product_remove
    end
end

class UsersController < ApplicationController
    def product_add
      if current_user
         @product = Product.find(params[:id])
         @user = current_user
         @user.product = []
         @user.product << @product.id
         redirect_to @product, notice: "succesful..."
      else
         redirect_to @product, notice: "error..."
      end
    end
end

class AddProductsToUsers < ActiveRecord::Migration
  def change
    add_column :users, :product, :text
  end
end

一定有一种 Rails 方法可以做到这一点 :) 如果可以,请帮助我。 谢谢!

最佳答案

您应该创建三个表:UserProductConsumedProductsproduct 表和user 表具有多对多关系。 中间表将是 ConsumedProducts,您将在其中存储用户 ID 和产品 ID。

Class User < ActiveRecord::Base
   has_many :consumed_products;
   has_many :products, :through => :consumed_products
end

Class Product < ActiveRecord::Base
   has_many :consumed_products;
   has_many :users, :through => :consumed_products
end

Class ConsumedProducts < ActiveRecord::Base
   belongs_to :user
   belongs_to :product
end

每次用户点击他消费了一个产品,你会用user_id和product_id填写中间表。每次他取消选中该产品时,您都会删除该记录。

另一种方法是使用 has_and_belongs_to_many,请参阅文档以了解不同之处(如果您的中间表没有额外的属性,请使用第二个,这是您的情况,当您命名额外的表)。

如果你真的想那样实现,你可以像你实现的那样,但是改变了 HTTP 方法:

resources :users do
    member do
        post :product_add
        delete :product_remove
    end
end

您可以查看此文献以获得更多帮助:http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

关于ruby-on-rails - 将产品标记为已消耗,Rails 方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15481131/

相关文章:

mysql - rails activerecord、mysql 和 mysql2 性能下降?

ruby-on-rails - 如何从字符串插值中逃脱#{

ruby-on-rails - 使用 erb 渲染一个变量

ruby-on-rails - 设计确认 token 无效

ruby-on-rails - 有没有比使用正则表达式更快的解析主题标签的方法?

Ruby, pack 编码(无法转换为UTF-8的ASCII-8BIT)

ruby-on-rails-3.2 - 如何覆盖事件管理员 0.5.0 的 scoped_collection 中的默认排序顺序

ruby-on-rails - rails 3.1 : Trouble on displaying images in mailer view files

javascript - 当事件处理程序附加到父 HTML 元素时,如何防止默认事件操作?

ruby-on-rails - 如何使用 rspec 测试 Rails 4 应用程序的 CMS 页面内容