ROR控制器方法"更新"不更新数据库

时间:2013-11-01 00:42:58

标签: ruby-on-rails ruby controller

我的控制器中有一个更新方法如下:

def edit
 @card = Card.find(params[:id])  
end

def update
 @card = Card.find(params[:id])
 if @card.update_attributes(params[card_params])

   flash[:success] = "Changes saved"

   redirect_to new_card_path(:deck =>@card.deck_id)         

 else
    redirect_to new_card_path(:deck =>@card.deck_id)                       
 end

end


private

def card_params
    params.require(:card).permit(:atext, :qtext, :deck_id)
end

我的表格如下:

<%= simple_form_for @card, :html => { :method => :put} do |f| %>

<p> Fields marked with * are required </p>

<div><%= f.label "Question *" %> <br />
<%= f.text_area :qtext, :autofocus => true, :default => @card.qtext  %></div>

<div><%= f.label "Answer *" %> <br />
<%= f.text_area :atext, :autofocus => true, :default => @card.atext %></div>

<%= f.hidden_field :deck_id, :value => @card.deck_id %>


<%= f.submit "Save Changes", class: "btn btn-large btn-primary" %>

<%end%>

当填写表单时,它会重定向,就好像它更新了属性一样,并且flash [:success]消息实际上确实出现了,但实际上并没有将更改存储在数据库中。

有什么建议吗?

如果你想知道,我在我的路线中使用“资源:卡片”来访问编辑和更新方法。

编辑*

卡片型号的细节(根据要求)

class Card < ActiveRecord::Base

    belongs_to :deck
    belongs_to :recent_deck
    belongs_to :favorite_deck


    has_one  :deck
    validates :atext, :qtext, presence: true


after_create :do_setID

   private
def do_setID

  newID = self.id
  self.update_attributes(:card_id => newID)
end
   end

1 个答案:

答案 0 :(得分:0)

您的card_params方法返回属性哈希值,因此params[card_params]nil

替换:

if @card.update_attributes(params[card_params])

使用:

if @card.update_attributes(card_params)