控制器中的更新操作不会更改

时间:2013-03-15 19:30:01

标签: ruby-on-rails-3 attributes params

我正在尝试将名为listing_status的属性的状态从Active更改为Terminated。我这样尝试过它并没有用。知道我做错了什么吗?

<%=link_to("Terminate", listing_path(listing, :listing_status => "Terminated"), :method => :put, :confirm => "Are you sure you want to TERMINATE this listing?", :class => 'btn btn-danger')%>

列出控制器更新操作

def update  
@listing = Listing.find(params[:id])

respond_to do |format|
  if @listing.update_attributes(params[:listing])
    if @listing.listing_status == "Active"
        @listing.sold.destroy if @listing.sold
    end 
    flash[:notice] = 'house was successfully updated'
    format.html { redirect_to :action=> "show" }
    format.json { head :no_content }
  else
    format.html { render action: "edit" }
    format.json { render json: @listing.errors, status: :unprocessable_entity }
  end
end

1 个答案:

答案 0 :(得分:1)

您已将状态传递为params[:listing_status],但尝试使用params[:listing]更新列表。由于该名称没有参数,因此不会进行任何更新。

您可能希望更改链接以符合预期的参数格式:

<%= link_to("Terminate", 
  listings_path(listing, 'listing[listing_status]' => "Terminated"),
  :method => :put, :confirm => "Are you sure you want to TERMINATE this listing?", 
  :class => 'btn btn-danger') %>