次のように、コントローラーに 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