0

Productユーザーがリンクを購読できるようにするためのリンクを作成する方法を理解するのに助けが必要です。私は最初に私のSubscriptionモデルを持っています:

class Subscription < ActiveRecord::Base
  attr_accessible :subscribable_id
  belongs_to :subscriber, :class_name => "User"
  belongs_to :subscribable, :polymorphic => true
end

それから私のProductモデル:

class Product < ActiveRecord::Base
  attr_accessible :name, :price
  belongs_to :user
  has_many :subscriptions, :as => :subscribable
end

DELETE私の計画は、製品を購読するためにクリックするリンクの方法と同様に、私の見解を作ることです。これが私のルート、コントローラー、そしてビューです:

resources :products do
    post :subscribe_product, :on => :collection
end

ProductsController:

def subscribe_product
  @product = Product.find(params[:id])
  # Not sure what goes here next? 
  # Something like: user.subscriptions.create(:subscribable => product)
end

意見:

<table>
 <% for product in @products %>
  <tbody>
   <tr>
    <td><%= product.name %></td>
    <td><%= product.price %></td>
    <td><%= link_to 'Delete', product, :confirm => 'Are you sure?', :method => :delete %></td>
    <td><%= link_to 'Subscribe', :controller => "products", :action => "subscribe_product", :id => product.id %></td>
   </tr>
  </tbody>
 <% end %>
</table>

今のところ、これは奇妙なエラーを出します:

ActiveRecord::RecordNotFound in ProductsController#show

Couldn't find Product with id=subscribe_product

彼らの2つのこと、

  1. サブスクライブするメソッドを作成します。
  2. リンクを正しくする。

これら2つをどのように実行しますか?

4

2 に答える 2

2

デフォルトでは、link_to は GET を使用するため、ルーターは、最初のパラメーターが ID である ProductsController#show に移動しようとしていると認識します。

http://yoursite.com/products/subscribe_product/5

これは、subscribe_product の id パラメータを持つ製品コントローラへの取得リクエストです。

:method => :post を link_to ヘルパーに渡すと、ルーターが期待する投稿リクエストが発行されます。

<%= link_to 'Subscribe', :controller => "products", :action => "subscribe_product", :id => product.id, :method => :post %>

ユーザーモデルを投稿しないと、確かなことはわかりませんが、メソッドは次のようになります。

@product.subscriptions.create(:user_id => user.id)
# user.id would be current_user.id, or whatever you are storing the current user as
于 2012-04-05T20:46:29.153 に答える
0

パスはPOSTsubscribe_productを使用しているため、そのメソッドを使用するようにリンクを変更する必要があります。

<%= link_to 'Subscribe', {:controller => "products", :action => "subscribe_product", :id => product.id}, :method => :post %>

あなたの行動はおそらく次のようになります。

@product.subscriptions << Subscription.new(:user_id => current_user.id)
于 2012-04-05T20:49:37.810 に答える