2010-12-14 54 views
0

背景簡單的Rails與非用戶自定義輸入驗證問題

  • 我使用acts_as_list寶石在一個Rails應用程序
  • 我的職位表中有一個位置
  • 位置被分配在我的模型中的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 

我的問題: 我不希望用戶能夠設置的位置,所以我從發佈形式取出位置字段。當我提交新帖子時,驗證失敗,並且我被告知該位置不能爲空。

我意識到我的驗證失敗了,因爲用戶並沒有自己輸入位置,但是我已經在before_filter中設置了位置,所以如何在執行驗證時獲得rails的使用信息?

獎金問題 表單提交,當我刪除了驗證,但我不知道爲什麼這樣的作品,因爲我沒有通過位置到attr_accessible?我將其他一些符號傳遞給它,如下所示:attr_accessible :title, :description, :category_id但我沒有通過:position。那裏可能有問題嗎?應該採取attr_protected?

回答

1

第一個問題

before_validation :set_position, :on => :create 

獎金的問題。 你可能得到大規模分配新建分配FY warrning(檢查日誌) 當您刪除驗證軌道不上:position所以他們救什麼是attr_accesible(大概位置會在DB空)

+0

感謝返回任何錯誤,這是完美的。 – stephenmurdoch 2010-12-14 18:16:14

+0

我所有的榮幸 – codevoice 2010-12-14 18:21:19