したがって、私ClientsController.rb
の場合、次のことを行う before フィルターがあります。
現在の年月をチェックします。月が 6 月より後の場合は、変数vote_year
を来年に設定します。そうでない場合は、vote_year
今年に設定します。
次に、7 月 1 日の厳しい月と日とともに、その年に基づいて日付属性を設定しています。
基本的に、この特定の日付は毎年 7 月 1 日です。このフィルターが実行された時間が 7 月 1 日より前か後かに基づいて、次の日付を設定する前にフィルターが必要です。
私が持っているコードは次のとおりです。
before_filter :set_next_vote_date, :only => [:create, :new, :edit, :update]
private
def set_next_vote_date
client = current_user.clients.find(params[:id])
today = DateTime.parse(Time.now.to_s)
year = today.year
if today.month == 7 && today.day == 1
vote_year = today.year
elsif today.month > 6
vote_year = year + 1
else
vote_year = year
end
client.next_vote = "#{vote_year}-07-01"
end
問題は、これらのコントローラーでこれらのアクションを実行するたびに、エラーがスローされないことです。ただし、next_vote
クライアント レコードの属性は更新されていません。
私は何が欠けていますか?
編集1:
update_attribute
( なしで)使用した後!
、エラーは発生しませんが、ログでこの特定の属性が更新されていません。
Started PUT "/clients/1" for 127.0.0.1 at 2012-09-08 20:09:17 -0500
Processing by ClientsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"J172LuZQc5N=", "client"=>{"name"=>"John F Kennedy", "email"=>"jfk@email.com", "phone"=>"8234698765", "firm_id"=>"1", "topic_ids"=>"2"}, "commit"=>"Update Client", "id"=>"1"}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
Client Load (0.1ms) SELECT "clients".* FROM "clients" WHERE "clients"."user_id" = 1 AND "clients"."id" = ? LIMIT 1 [["id", "1"]]
(0.1ms) begin transaction
(0.0ms) commit transaction
CACHE (0.0ms) SELECT "clients".* FROM "clients" WHERE "clients"."user_id" = 1 AND "clients"."id" = ? LIMIT 1 [["id", "1"]]
(0.1ms) begin transaction
Topic Load (0.6ms) SELECT "topics".* FROM "topics" WHERE "topics"."id" = ? LIMIT 1 [["id", 2]]
Topic Load (0.2ms) SELECT "topics".* FROM "topics" INNER JOIN "clients_topics" ON "topics"."id" = "clients_topics"."topic_id" WHERE "clients_topics"."client_id" = 1
(0.4ms) UPDATE "clients" SET "phone" = 823498765, "updated_at" = '2012-09-09 01:09:17.631839' WHERE "clients"."id" = 1
(1.4ms) commit transaction
Redirected to http://localhost:3000/clients/1
next_vote
属性は更新されないことに注意してください。edit
確かに、フォームのパーシャルにはその属性を含めませんでしたが、これbefore_filter
が実行されている場合、レコードが更新されると想定しました。しかし、それがまったく実行されているかどうかさえわかりません。
編集2:
気にしないでください、それは今働いているようです。上記のログの貼り付けは、編集アクションの後であり、編集アクションの前に before_filter が実行されます-DUH! 愚かな私:)