0

ユーザーがアイテムを販売した場合、ユーザーに「販売済み」ボタンを実装しようとしています。これを実装しようとして考えているのは、製品のテーブルに新しい列を追加することです。販売された場合は、データの属性を更新する必要があります。このリンクを参照する場合、http://apidock.com/rails/ActiveRecord/Base/update_attributes

これは私がすべきことですか?私は正しいですか?

モデル/製品

class Product < ActiveRecord::Base
  attr_accessible :sold
end

製品コントローラ

def sold
  @product = Product.find(params[:product_id])
  @product.sold = 'true'
  save
  redirect_to product_path
end

ビュー/製品/ショー

 <button type="button" class="btn btn-default"><%= link_to 'Sold', idontknowwhatotputhere %></button>

これは、私が確信していないことにも関係しています。link_to には何を入力すればよいですか? また、以前に述べた販売済みの定義に関連するようにアプリケーションに指示するにはどうすればよいですか?

4

2 に答える 2

1

さて、ここでいくつかのこと。

  1. 正当な理由がない限り、コントローラーで特別なアクションを実行しないでください。あなたがしているのは、製品を更新することだけです。そのため、ルートに「update」という名前を付けます。そして、リンクで、sold=true を指定して put リクエストを実行します。物事を RESTful かつ従来型に保ちます。

  2. それをしたら、コントローラーで検証などを行いたいと思うでしょう。

    def update
      if product && product.update(product_params)
        redirect_to product_path
      else 
        redirect_to edit_product_path
      end
    end
    
    private
    
    def product
      @product ||= Product.find(params[:id])
    end
    
    def product_params
      params.require(:product).permit(:sold)
    end 
    

3.アプリケーションにリンクを追加して更新するには、次のようになります。

<%= link_to 'Mark as sold', product_path(@product, product: {sold: true} ), method: :put %>
于 2015-04-18T22:20:37.713 に答える
0

最初にルートを宣言する必要があります。routes.rb で次のようにします。

resources :products do

  get :sold, on: :member

end

そのルートは「sold_product」のようなパス ヘルパーを生成する必要があり、次のように使用できます。

 <button type="button" class="btn btn-default"><%= link_to 'Sold', sold_product(@product.id) %></button>

「rake routes」を使用してヘルパーを確認できます

属性の更新については、次を使用できます。

 @product.update_attribute(:sold, true)
于 2015-04-18T22:19:04.863 に答える