Rails 3.2.17
モデル内の2 つの仮想属性 ( expiration_amount
& ) にアクセスしようとしexpiration_format
ていますが、それらにアクセスすることはできませんでした。
他のすべては正しく更新されているようですが、私のログでは仮想属性が常に空白になっています。
編集提案どおりに両方を追加しましたが、まだ機能していませ:expiration_amount
:expiration_format
ん。attr_accessible
どちらも空白になります。私が気づいたことの 1 つは、DB にヒットした後にロガー呼び出しが発生していたことです。before_update
これは正しいフィルターではありませんか?
EDIT 2Devise
仮想属性へのアクセスを妨げている可能性はありますか?
EDIT 3モデル内のこれらの仮想属性にアクセスできなかった理由についてはまだ興味がありますが、コントローラーから開始することにしました (これは機能しています)。
ワーキングコントローラーアクション(Updateメソッド)
@user.set_expiration(params[:expiration_amount].to_i, params[:expiration_format])
ワーキングモデル法
def set_expiration(amount, format)
if defined?(amount) && defined?(format)
case format
when "hours"
self.expiration = amount.hours.from_now
when "days"
self.expiration = amount.days.from_now
when "weeks"
self.expiration = amount.weeks.from_now
else
self.expiration = amount.hours.from_now
end
end
end
---オリジナルコード---
ユーザー.rb
class User < ActiveRecord::Base
attr_accessible :email,
:password,
:password_confirmation,
:remember_me,
:first_name,
:last_name,
:company,
:phone,
:expiration,
:expiration_amount,
:expiration_format
attr_accessor :expiration_amount,
:expiration_format
before_update :set_expiration
def set_expiration
logger.debug "DEBUG - expiration_amount: #{expiration_amount}"
logger.debug "DEBUG - expiration_format: #{expiration_format}"
if expiration_amount && expiration_format
case expiration_format
when "hours"
self.expiration = expiration_amount.hours.from_now
when "days"
self.expiration = expiration_amount.days.from_now
when "weeks"
self.expiration = expiration_amount.weeks.from_now
else
self.expiration = expiration_amount.hours.from_now
end
end
end
end
形
= form_for(resource, :as => resource_name, :url => admins_user_update_path(resource), :html => { :method => :put }) do |f|
= devise_error_messages!
%fieldset{id: "edit-user-account"}
%legend
Set User Access
.field.required
%label
"Allow access for "
= select_tag "expiration_amount", options_for_select(expiration_amount, 3)
= select_tag "expiration_format", options_for_select(expiration_format, "days")
%span.instructions
From Now
.field
= f.submit "Grant Access"
ログ
Parameters: {"utf8"=>"✓", "authenticity_token"=>"xxx=", "expiration_amount"=>"3", "expiration_format"=>"days", "commit"=>"Grant Access", "id"=>"5"}
User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", "5"]]
Admin Load (0.4ms) SELECT "admins".* FROM "admins" WHERE "admins"."id" = 1 LIMIT 1
(0.3ms) BEGIN
DEBUG - expiration_amount:
DEBUG - expiration_format:
(0.3ms) COMMIT
Redirected to http://localhost:8080/admins/users