论坛首页 Ruby版 rails

请教个 Rails one to many validate 的问题

浏览 816 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-10-02
两个model

area.rb
class Area < ActiveRecord::Base
  has_many  :categories
  
  validates_presence_of :name,  :sort_order
  validates_uniqueness_of :name
end


category.rb
class Category < ActiveRecord::Base
  belongs_to  :area
  has_many    :topics
  
  validates_presence_of   :name,  :sort_order
  validates_uniqueness_of :name
  validates_associated    :area
end


controller:
  def category_new
    @category = Category.new
    @areas = Area.find(:all)
  end

  def category_create
    @category = Category.new(params[:category])
    if @category.save
      flash[:notice] = 'Category was successfully created.'
      redirect_to :action => 'category_list'
    else
      render :action => 'category_new'
    end
  end


view:
category_new.rhtml

<div class="admin-form">
  <fieldset>
  <legend>新建类别</legend>
    <% form_tag :action => 'category_create' do %>
    <%= render :partial => 'category_form' %>
        <%= submit_tag "新建" %>
    <% end %>
  </fieldset>
</div>

<br/>
<%= link_to '返回', :action => 'category_list' %>


_category_form.rhtml
<%= error_messages_for "category" %>

<!--[form:category]-->
<p><label for="category_name">分类名称</label><br/>
<%= text_field 'category', 'name'  %></p>

<p><label for="category_area_id">版区名称</label><br/>
<%= collection_select("category", "area_id" , @areas, "id", "name") %></p> 
</p>

<p><label for="category_sort_order">排序</label><br/>
<%= text_field 'category', 'sort_order'  %></p>


现在的问题是: 如果满足 Category 类的条件, 添加、删除、修改都正常
但是,只要 Category 校验不通过(比如让 分类名称 为空)提交后就提示:

Showing app/views/admin/_category_form.rhtml where line #8 raised:

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.inject

难道是rails的校验有顺序?google了半天没结果,郁闷
   
最后更新时间:2007-10-03
那是因为你在category_create里少了赋值@areas = Area.find(:all) 而在category.save失败后又render了'category_new',这个view里又render partial用了_category_form.rhtml ,在第8行里用到了@areas这个变量

其实根据你帖的错误提示“Showing app/views/admin/_category_form.rhtml where line #8 raised:”一眼就看到了这个错误,你咋就不仔细瞧瞧错误提示呢?
你是不懂英文呢还是真的不懂英文呢?
   
0 请登录后投票
最后更新时间:2007-10-03
rainchen 写道
那是因为你在category_create里少了赋值@areas = Area.find(:all) 而在category.save失败后又render了'category_new',这个view里又render partial用了_category_form.rhtml ,在第8行里用到了@areas这个变量

其实根据你帖的错误提示“Showing app/views/admin/_category_form.rhtml where line #8 raised:”一眼就看到了这个错误,你咋就不仔细瞧瞧错误提示呢?
你是不懂英文呢还是真的不懂英文呢?


谢谢,现在ok了,提示是看懂了,初用rails,语法还觉得比较奇怪,还不适应,再次表示感谢
   
0 请登录后投票
最后更新时间:2007-10-03
blwidow 写道
rainchen 写道
那是因为你在category_create里少了赋值@areas = Area.find(:all) 而在category.save失败后又render了'category_new',这个view里又render partial用了_category_form.rhtml ,在第8行里用到了@areas这个变量

其实根据你帖的错误提示“Showing app/views/admin/_category_form.rhtml where line #8 raised:”一眼就看到了这个错误,你咋就不仔细瞧瞧错误提示呢?
你是不懂英文呢还是真的不懂英文呢?


谢谢,现在ok了,提示是看懂了,初用rails,语法还觉得比较奇怪,还不适应,再次表示感谢
真没觉得ruby的语法有什么奇怪的地方,一切看上去都是那么自然
   
0 请登录后投票
论坛首页 Ruby版 rails

跳转论坛:
JavaEye推荐