因为我对 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 方法中,我的虚拟现场测试始终为零。除非我在控制台中运行验证:
co = Comment.new
co.testing = "Hello"
co.valid?
我已经使用记录器进行了检查。如果我通过控制台运行,则测试字段不是零。如果我通过浏览器运行它,它是。似乎该参数未正确传递给模型。我希望我只是错过了一些非常明显的东西。希望您能够帮助我。
干杯,迈克尔