3

私は 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 ではありません。ブラウザ経由で実行すると、そうです。パラメータがモデルに正しく渡されていないようです。本当に明白な何かを見逃してしまったことを願っています。あなたが私を助けてくれることを願っています。

乾杯、マイケル

4

2 に答える 2

0

これは、作成または更新アクションの内容と関係があります。scaffold ジェネレーターは、実際の属性を設定するコードを挿入しますが、attr_accessor からセッター メソッドを呼び出しません。

于 2012-04-21T23:00:34.373 に答える
0

あなたのモデルに追加attr_reader :testingしてください!

于 2012-04-21T22:45:35.090 に答える