Rails正在保存空记录

时间:2011-08-21 10:45:26

标签: ruby-on-rails-3

我的路线

TerritoryManagement::Application.routes.draw do

  get "new" => "territories#new", :as => "new"

  root :to => "territories#new"
  resources :territories
  resources :users
end

我的模特

 class Territory < ActiveRecord::Base
   validates :name, :presence => true, :uniqueness => true
   attr_accessor :name
 end

我的控制器

class TerritoriesController < ApplicationController
  def index
    @territories = Territory.all
  end

  def show
    @territory = Territory.find(params[:id])
  end

  def new
    @territory = Territory.new
  end

  def create
    @territory = Territory.new(params[:territory])
    if @territory.save
      redirect_to root_url, :notice => "Product successfully created!"
    else
      render "new"
    end
  end
end

我的观点

<%= form_for(@territory) do |f| %>
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
   </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>`

我的数据库 由于某种原因,该应用程序正在生成空记录...

sqlite> select * from territories;
1||2011-08-21 09:44:43.611946|2011-08-21 09:44:43.611946

任何想法出了什么问题?

2 个答案:

答案 0 :(得分:3)

你将attr_accessor与attr_accessible混淆。

编辑:

attr_accessor是一种为给定输入符号创建getter和setter的方法。如果您正在重写数据库属性,那么在ActiveRecord模型中使用它肯定不是一个好主意。我不能说我的头脑会发生什么,但ActiveRecord肯定是行为不端的。您的名称属性是我认为您的地区表的字段,并且使用rails 3您必须声明您希望通过批量分配来访问哪些字段。请参阅文档:http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html#method-i-attr_accessible

我希望这个编辑有帮助;)

答案 1 :(得分:1)

我不确定但是尝试删除attr_accessor,可能你不需要它。