Rails正在保存空记录

23 浏览
0 Comments

Rails正在保存空记录

我的路由

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 => "产品创建成功!"
    else
      render "new"
    end
  end
end

我的视图

<%= form_for(@territory) do |f| %>
    <%= f.label :name %>
    <%= f.text_field :name %>
    <%= f.submit %>
<% end %>`

我的数据库

由于某种原因,应用程序正在生成空记录...

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

有什么问题吗?

0
0 Comments

Rails中保存空记录的问题出现的原因是使用了attr_accessor。attr_accessor是一个Ruby方法,用于在类中创建getter和setter方法。然而,在Rails中,使用attr_accessor可能会导致一些问题。

解决这个问题的方法是删除attr_accessor。在大多数情况下,Rails会自动为模型中的属性创建getter和setter方法,所以不需要手动使用attr_accessor。

参考链接:http://stackoverflow.com/questions/2793098

0
0 Comments

在这段内容中,问题的出现原因是将attr_accessor和attr_accessible混淆了。在ActiveRecord模型中使用attr_accessor方法重新定义数据库属性是不明智的。无法立即说出会发生什么,但ActiveRecord肯定会出现异常行为。在Rails 3中,你必须声明哪些字段可以进行批量赋值。解决方法是使用attr_accessible方法来声明可访问的字段。

0