论坛首页 Ruby版 rails

rails的校验问题

浏览 1229 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-02-28
正在看 rails 的教程,上面讲的将校验放到了 model里,
但实际情况可能是两个模块都会使用这个model,但是对字段的校验规则不相同,
想问问怎么才能把校验放到 controller里呢?

另外 rails默认的校验方法所显示的字符串,怎么才能修改呢?

谢谢
   
最后更新时间:2007-02-28
在model里建两个方法,在controller里调用。毕竟validation是model的职责。
   
0 请登录后投票
最后更新时间:2007-02-28
谢谢!以下是代码,但是提示错误。。。

class Product < ActiveRecord::Base
public
  def createValidate
  validates_presence_of :title, :description, :image_url
  end
end


class AdminController < ApplicationController
def create
   
    Product.createValidate
    。。。其他省略
end
end


错误信息是:
E:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/base.rb:1233:in `method_missing'
#{RAILS_ROOT}/app/controllers/admin_controller.rb:25:in `create'
E:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/base.rb:1233:in `method_missing'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/base.rb:1095:in `send'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/base.rb:1095:in `perform_action_without_filters'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/filters.rb:632:in `call_filter'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/filters.rb:638:in `call_filter'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/filters.rb:438:in `call'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/filters.rb:637:in `call_filter'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/filters.rb:619:in `perform_action_without_benchmark'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/benchmarking.rb:66:in `perform_action_without_rescue'
E:/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/benchmarking.rb:66:in `perform_action_without_rescue'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/rescue.rb:83:in `perform_action'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/base.rb:430:in `send'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/base.rb:430:in `process_without_filters'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/filters.rb:624:in `process_without_session_management_support'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/session_management.rb:114:in `process'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/base.rb:330:in `process'
E:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.1/lib/dispatcher.rb:41:in `dispatch'
E:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.1/lib/webrick_server.rb:113:in `handle_dispatch'
E:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.1/lib/webrick_server.rb:79:in `service'
E:/ruby/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
E:/ruby/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
E:/ruby/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'
E:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start'
E:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
E:/ruby/lib/ruby/1.8/webrick/server.rb:95:in `start'
E:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `each'
E:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `start'
E:/ruby/lib/ruby/1.8/webrick/server.rb:23:in `start'
E:/ruby/lib/ruby/1.8/webrick/server.rb:82:in `start'
E:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.1/lib/webrick_server.rb:63:in `dispatch'
E:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.1/lib/commands/servers/webrick.rb:59
E:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
E:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
E:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:496:in `require'
E:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:343:in `new_constants_in'
E:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:496:in `require'
E:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.1/lib/commands/server.rb:39
E:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
E:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
E:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:496:in `require'
E:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:343:in `new_constants_in'
E:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:496:in `require'
script/server:3
E:/ruby/lib/ruby/gems/1.8/gems/activerecord-1.15.1/lib/active_record/base.rb:1233:in `method_missing'
#{RAILS_ROOT}/app/controllers/admin_controller.rb:25:in `create'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/base.rb:1095:in `send'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/base.rb:1095:in `perform_action_without_filters'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/filters.rb:632:in `call_filter'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/filters.rb:638:in `call_filter'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/filters.rb:438:in `call'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/filters.rb:637:in `call_filter'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/filters.rb:619:in `perform_action_without_benchmark'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/benchmarking.rb:66:in `perform_action_without_rescue'
E:/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/benchmarking.rb:66:in `perform_action_without_rescue'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/rescue.rb:83:in `perform_action'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/base.rb:430:in `send'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/base.rb:430:in `process_without_filters'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/filters.rb:624:in `process_without_session_management_support'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/session_management.rb:114:in `process'
E:/ruby/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/base.rb:330:in `process'
E:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.1/lib/dispatcher.rb:41:in `dispatch'
E:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.1/lib/webrick_server.rb:113:in `handle_dispatch'
E:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.1/lib/webrick_server.rb:79:in `service'
E:/ruby/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
E:/ruby/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
E:/ruby/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'
E:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start'
E:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
E:/ruby/lib/ruby/1.8/webrick/server.rb:95:in `start'
E:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `each'
E:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `start'
E:/ruby/lib/ruby/1.8/webrick/server.rb:23:in `start'
E:/ruby/lib/ruby/1.8/webrick/server.rb:82:in `start'
E:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.1/lib/webrick_server.rb:63:in `dispatch'
E:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.1/lib/commands/servers/webrick.rb:59
E:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
E:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
E:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:496:in `require'
E:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:343:in `new_constants_in'
E:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:496:in `require'
E:/ruby/lib/ruby/gems/1.8/gems/rails-1.2.1/lib/commands/server.rb:39
E:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
E:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
E:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:496:in `require'
E:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:343:in `new_constants_in'
E:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:496:in `require'
script/server:3
Request
Parameters: {"commit"=>"Create", "product"=>{"image_url"=>"", "price"=>"", "title"=>"", "date_available(1i)"=>"2007", "description"=>"", "date_available(2i)"=>"2", "date_available(3i)"=>"28", "date_available(4i)"=>"13", "date_available(5i)"=>"17"}}

Show session dump

---
flash: !map:ActionController::Flash::FlashHash {}


Response
Headers: {"cookie"=>[], "Cache-Control"=>"no-cache"}
   
0 请登录后投票
最后更新时间:2007-02-28
已经知道怎么回事了,谢谢!
   
0 请登录后投票
最后更新时间:2007-02-28
但是如何修改rails的默认错误信息呢?例如我想改成中文的。
   
0 请登录后投票
最后更新时间:2007-02-28
问之前也许你该搜索下,看这个帖子:http://www.javaeye.com/post/150597
   
0 请登录后投票
最后更新时间:2007-02-28
如果两个的校验规则不同,应该是两个不同的model阿,用一个Base的Model,然后两个子类,实现不同的validation
   
0 请登录后投票
最后更新时间:2007-02-28
刑天战士 写道
如果两个的校验规则不同,应该是两个不同的model阿,用一个Base的Model,然后两个子类,实现不同的validation


但他们是同一个表的阿。。。
   
0 请登录后投票
最后更新时间:2007-02-28
如果仅仅是在不同时刻校验,可以使用hook来做。
   
0 请登录后投票
最后更新时间:2007-02-28
yananay 写道
刑天战士 写道
如果两个的校验规则不同,应该是两个不同的model阿,用一个Base的Model,然后两个子类,实现不同的validation


但他们是同一个表的阿。。。

ActiveRecord貌似可以改变默认的表名的……java用惯了,很多地方转变不过来……
   
0 请登录后投票
论坛首页 Ruby版 rails

跳转论坛:
JavaEye推荐