Rails 4使用按钮更改DB中的布尔值



我正在研究简单应用程序以创建您的音乐集。要将专辑添加到Collection我正在使用Collection.RB模型,它运行良好,但是我决定添加一个参数:to_buy到Collection,然后添加第二个按钮"添加到愿望列表"。

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在集合中,但仍然是零的。谁能解释为什么?

@album.update_attributes(params[:collection][:to_buy]) 

应该更改为

@album.update_attributes(:to_buy, params[:collection][:to_buy])

您需要提供要更新的属性。我还建议在通过模型对象查询时使用以代替查找的位置。

尽管GhoStrider有有效的信息,但让我解释一下我们要为此做的事情:


自定义方法

如果要更新一个属性,我将在控制器中进行自定义方法&amp;通往它的路线:

#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 %>

最新更新