我以不同的方式开始了一个关于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
答案 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