2010-12-14 8 views
0

背景シンプルなRailsの検証問題

  • 私は私の記事のテーブルには、位置
  • を持って
  • レールのアプリでacts_as_list宝石を使用していますポジションは、私のモデルのbefore_createコールバックで割り当てられます:
class Post < ActiveRecord::Base  
    acts_as_list 
    before_create :set_position 
    attr_accessible :title, :description, :category_id 
    validates :position, :presence => true, :uniqueness => true 

    protected 
    def set_position 
     self.position = Post.all.size + 1 
    end 
end 

私の問題:これは私のPostモデルのためのコードである 私は、ユーザーが位置を設定することができるようにしたくないので、私はポストフォームから位置フィールドを削除しました。私が新しい投稿を提出すると、検証は失敗し、位置は空白にすることはできません。

ユーザが自分自身で位置を入力していないため、私の検証が失敗していることがわかりましたが、before_filterで位置を設定しましたので、検証を実行中にその情報を使用するにはどうすればよいですか?私は検証を削除すると

ボーナス質問 フォームを提出するが、私は位置がattr_accessibleし渡さないので、これは動作しますなぜ私は思っていましたか?私はそれに多くの他のシンボルを渡す:attr_accessible :title, :description, :category_idしかし、私は:positionを渡すことはありません。そこに問題がある可能性はありますか?位置をattr_protectedにする必要がありますか?

答えて

1

最初の質問

before_validation :set_position, :on => :create 

ボーナス質問。 あなたが検証レールを削除するとあなたはおそらく

+0

おかげでそう、彼らは(おそらく位置がDBにnullになります)attr_accesibleにあったものを保存し:position上の任意のエラーを返すいけない (ログを確認してください)質量assigmentのwarrningを得、これは完璧です。 – stephenmurdoch

+0

すべて私の喜び – codevoice