0

次のように、コントローラーに update メソッドがあります。

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
4

1 に答える 1