请教一个 关于验证的问题 请大家帮忙看一下

建立了一个发布图书的模型 book 还有个分类的模型category 在BOOK 的NEW 里让用户发布一本新书的时候同时要指定这本书的分类
def new
@book=Book.new
@categorys=Category.find(:all)
end

视图如下

分类:
<%@categorys.each do |category|%>
<%=f.radio_button :category_id,category.id %> <%= category.name %>
<%end%>

我在BOOK模型里加入了 validates_presence_of :category_id, :message => '请输入分类' 验证
可是当我试着不填写 分类的时候 因该验证失败 并显示 请输入分类 的错误信息
可是出现的是一个错误页面 说 @categorys 是个空对象 我研究后发现 因该是 book create 方法里的问题
if @book.save
redirect_to book_path(@book)
else
render :action=>'new'
end
render :action=>'new'这句好像是没有从新 运行 NEW 方法 所以报错 说@categorys是个空对象我在BOOK CREATE方法里加入 @categorys=Category.find(:all) 就好了 请问这个问题怎么解决呢难道非要这样 在CREATE方法里加?

有时候,不要太固执啊。

你这时就可以灵活一点,将视图中的<%@categorys.each do |category|%> 换成
<% Category.find(:all).each do |category|%>

将def new方法中的@categorys=Category.find(:all) 去掉。

恩,碰到过这样的问题,同样楼上的做法,自己也试过在create里加 find
如果在controller里加find的话,最好优化一下:比如添加一个
[code="ruby"]
before_filter :find_categories, :on => [:new,create,edit,update]

def find_categories
@categorys=Category.find(:all)
end

[/code]