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

时间:2014-01-23 17:44:05

标签: ruby-on-rails ruby-on-rails-4

我正在开发简单的应用程序来创建您的音乐收藏。要将相册添加到集合我使用的是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。谁能解释为什么?

2 个答案:

答案 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 %>