我正在开发简单的应用程序来创建您的音乐收藏。要将相册添加到集合我使用的是Collection.rb模型,它运行得很好,但我决定添加一个参数:to_buy到Collection,并添加第二个按钮“Add to wishlist”。
collection_controller:
def create
@album = Album.find(params[:collection][:album_id])
current_user.collect!(@album)
@album.update_attributes(params[:collection][:to_buy])
respond_to do |format|
format.html { redirect_to @album }
format.js
end
end
添加相册的按钮代码:
<%= form_for(current_user.collections.build(album_id: @album.id), remote: true) do |f| %>
<div><%= f.hidden_field :album_id %></div>
<div><%= f.hidden_field :to_buy, :value => true %></div>
<%= f.submit "Add to my wishlist", class: "btn btn-large btn-primary" %>
<% end %>
专辑正在添加到集合中,但我想在集合中将值true发送到:to_buy,它仍为null。谁能解释为什么?
答案 0 :(得分:1)
@album.update_attributes(params[:collection][:to_buy])
应改为
@album.update_attributes(:to_buy, params[:collection][:to_buy])
因为您需要提供要更新的属性。我还建议在查询模型对象时使用where代替find。
答案 1 :(得分:1)
虽然GhostRider有有效的信息,但让我解释一下我们为此做些什么:
自定义方法
如果你想更新一个属性,我会在你的控制器中制作一个自定义方法。路线:
#config/routes.rb
resources :controller do
post :buy
end
#app/controllers/your_controller.rb
def buy
@album = Album.find(params[:collection][:album_id])
@album.update_attributes(to_buy: params[:collection][:to_buy])
respond_to do |format|
format.js
end
end
#app/views/
<%= form_for(current_user.collections.build(album_id: @album.id), url: buy_path(@album), remote: true) do |f| %>
<div><%= f.hidden_field :album_id %></div>
<div><%= f.hidden_field :to_buy, :value => true %></div>
<%= f.submit "Add to my wishlist", class: "btn btn-large btn-primary" %>
<% end %>