没有使用任何值保存的新记录

时间:2011-07-09 15:20:44

标签: ruby-on-rails-3

我以不同的方式开始了一个关于collection_select的问题,但我发现这不是问题所在。 此特定模型根本不会保存任何数据。它只是忽略参数中的值。我只能使用NULL值保存新记录(时间戳字段除外)。

请参阅我的评论,了解我最近的修复方法。

我使用方便的scaffold命令生成了一些模型。现在我尝试将文本框更改为collection_select,以便将新实体链接到正确的相关实体。

使用rails 3.1RC4(希望这不是错误)。

在_form.html.erb中我使用以下代码:

    <div class="field">
    <%= f.label :category_id %><br />
    <%= f.collection_select(:category_id, Admin::Category.all, :id, :name) %>
  </div>
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  ...all other items...
  <div class="actions">
    <%= f.submit %>
  </div>

点击提交按钮后,我收到错误消息。它说,名称和永久链接不符合验证。但我不明白,因为在日志文件中我发现了这个:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"my token is here", "admin_branche"=>{"category_id"=>"3", "name"=>"Verzekeraars", "permalink"=>"verzekeraars", "visible"=>"1"}, "commit"=>"Create Branche"}

对我来说,似乎params包含所有需要的值。

为了完整起见,我将在下面发布我的创建方法和模型。

到目前为止,我尝试在collection_select和f.coll之间来回切换......但没有成功。根据日志,当前设置似乎最适合我。 我也搜索了很多,但一直未能找到答案。这个网站上的问题2280106看起来是一样的,但它与我在模型中注释掉的attr_accessible有关(之后我重新启动了服务器并重试了,只是为了确定)。

非常感谢帮助!

branche.rb:

class Admin::Branche < ActiveRecord::Base

 # attr_accessible :name, :permalink

  #relationships
    has_many :courses, :as => :parent
    belongs_to :category

  #validations
    validates :name, :presence => true, :length => {:maximum => 255}
    validates :permalink, :presence => true, :length => { :within => 4..25 }

end

在控制器中创建动作:

  def create
    @admin_branch = Admin::Branche.new(params[:admin_branch])

    respond_to do |format|
      if @admin_branch.save
        format.html { redirect_to @admin_branch, notice: 'Branche was successfully created.' }
        format.json { render json: @admin_branch, status: :created, location: @admin_branch }
      else
        format.html { render action: "new" }
        format.json { render json: @admin_branch.errors, status: :unprocessable_entity }
      end
    end
  end

2 个答案:

答案 0 :(得分:0)

在控制器中,你这样做:

@admin_branch = Admin::Branche.new(params[:admin_branch])

你应该这样做:

@admin_branch = Admin::Branche.new(params[:admin_branche])

如果查看请求参数,属性位于“admin_branche”下,而不是“admin_branch”。

我认为应该解决您的问题,如果没有,请告诉我们。

答案 1 :(得分:0)

如果您对生成的变形有问题,可以在config / initializers / inflections.rb中完全自定义它们

只需添加以下内容:

ActiveSupport::Inflector.inflections do |inflect|
         inflect.irregular 'branch', 'branches'
     end