自定义验证方法中的虚拟属性总是零

时间:2012-04-21 22:41:34

标签: ruby-on-rails ruby ruby-on-rails-3 validation

因为我对Ruby on Rails很陌生,我将解释我的所作所为。我的模型中有一个名为测试的虚拟属性。我已经这样定义了:

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?

我已使用记录器进行了检查。如果我通过控制台运行测试 - 字段不是。如果我通过浏览器运行它,它就是。似乎参数不知何故没有正确传递给模型。我希望我错过了一些非常明显的东西。希望你能帮帮我。

干杯, 迈克尔

2 个答案:

答案 0 :(得分:0)

attr_reader :testing添加到您的模型中!

答案 1 :(得分:0)

它与您的创建或更新操作中的内容有关。脚手架生成器将放入代码来设置实际属性,但不会从attr_accessor调用setter方法。