Railsは初めてで、product_controller.rbに機能があります
def detach
@product.photo = nil
@product.save
end
ビュー ファイル show.html.erb からこのメソッドを呼び出して、メソッドが実行されるようにします。どうやってするの ?7 つのメソッドが .find(params[id]) を介して呼び出されることがわかりますが、それも明確ではありません。
Railsは初めてで、product_controller.rbに機能があります
def detach
@product.photo = nil
@product.save
end
ビュー ファイル show.html.erb からこのメソッドを呼び出して、メソッドが実行されるようにします。どうやってするの ?7 つのメソッドが .find(params[id]) を介して呼び出されることがわかりますが、それも明確ではありません。
次のようなルートを追加する必要がありますroutes.rb
。
resources :products do
member do
get 'detach' # /products/:id/detach
end
end
それはあなたdetach_product_path(@product)
があなたの見解で使うことができるあなたを与えるでしょう。おそらく、detachメソッドでリダイレクトも必要になるでしょう。
def detach
@product = Product.find(params[:id])
@product.photo = nil
if @product.save
redirect_to @product, notice: 'Photo was detached!'
end
end
サイモンの答えを修正しました。ただし、次のパスで製品を渡していないため、まだ問題に直面しています。
<%= link_to 'detach_image', detach_product_path %>
製品をアクションに渡す必要があります。
<%= link_to 'detach_image', detach_product_path(@product) %>
そうしProduct.find(params[:id])
ないと、 は製品を見つけられず、@product
は空になります...
編集して質問に回答してください:
1 -コントローラー内product_detach_path
のアクションのヘルパーです。もあり、同じことを行いますが、現在のホスト、ポート、およびパスのプレフィックスも含まれます。詳細はこちら。
ただし、パラメータを渡さないため、製品を見つけることができません。このため、検索しようとしている製品を指定する必要があります。アクションで定義されているため、ビューで使用できますが、他の製品を.... おそらく最初のものに送信できます。detach
product
product_detach_url
Product.find(params[:id])
@product
show
detach action
product_detach_path(Product.first)
2 - index、new、create、show、edit、update、destroyの7 つのデフォルト ルートresources :products
を生成します。
さらにルートを追加するには、またはを使用できます。基本的に、製品 (products/1/detach)へのルートを追加しますが、index (products/detach) などのコントローラーへのルートを追加します。詳細はこちら。member
collection
member
collection
それが役立つことを願っています...
以下のように変更してみてください
<%= link_to 'detach_image', product_detach_path(@product) %>
guides.rubyonrails.org/routing.html をご覧になることをお勧めします。
あなたは次のようにすることができます、
あなたはマッチを使うことができます
match '/update_profile', :to => 'users#update_profile'
また
resources :users do
get 'update_profile', on: :member
end
そして、あなたは間違いなくユーザーコントローラーにメソッドを持っているでしょう
def update_profile
@user = User.find(params[:id])
if @user.save
redirect_to @user, notice: 'user updated successfully!'
end
end