私は Ruby on Rails にかなり慣れていないので、私が何をしたかを説明します。私のモデルにはtestingという仮想属性があります。私はそれを次のように定義しました:
class Comment < ActiveRecord::Base
attr_accessor :testing
attr_accessible :user_name, :comment, :user, :testing
次に、次のようなカスタム検証用のカスタム メソッドを追加しました。
validate :custom_validation
もちろん、メソッドも追加しました。
def custom_validation
# a bit of custom_validation
end
次に、フォームにフィールドを追加しました。
<%= form_for(@comment) do |f| %>
<%= render 'shared/error_messages', :object => f.object %>
<%= f.hidden_field :post_id, :value => @post.id %>
<% if !signed_in? %>
<div class="field">
<%= f.label :user_name %>
<%= f.text_field :user_name, :class => "user_field" %>
</div>
<% else %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<% end %>
<div class="field">
<%= f.label :comment %>
<%= f.text_area :comment, :style => "height: 50px; width: 80%;" %>
</div>
<div class="field pin">
<%= f.label :testint %>
<%= f.text_field :testing, :class => "user_field" %>
</div>
<div class="buttons">
<%= f.submit "Speichern" %>
</div>
<% end %>
それだけです。だから、私がここで説明していないことをしたと思い込まないでください;)
私の問題は、仮想フィールドのテストが custom_validation メソッド内で常に nil であることです。コンソールで検証を実行しない限り:
co = Comment.new
co.testing = "Hello"
co.valid?
ロガーを使って調べました。コンソール経由で実行すると、testingフィールドは nil ではありません。ブラウザ経由で実行すると、そうです。パラメータがモデルに正しく渡されていないようです。本当に明白な何かを見逃してしまったことを願っています。あなたが私を助けてくれることを願っています。
乾杯、マイケル