我有一个模型资源,当我创建一个新条目时,我希望能够为它分配一个类别。代码设置如下:
Resource.rb
has_many :categories
category.rb
has_many_and_belongs_to :resources
(资源)_form.html.erb(以及其他资源字段)
<%= form_for @resource do |f| %>
<%= f.select :category, Category.all, :prompt => "Category" %>
<%= end %>
categories_controller.rb
class CategoriesController < ApplicationController
def new
@category = Category.new
end
def edit
@category = Category.find(params[:id])
end
def create
@category = Category.new(category_params)
@category.save
#redirect_to @category
end
def update
@category = Category.find(params[:id])
#if @category.update(params[:category].permit(:category_params))
# redirect_to @category
#else
# render 'edit'
#end
end
def destroy
@category = Category.find(params[:id])
@category.destroy
#redirect_to categorys_path
end
private
def category_params
params.require(:category).permit(:name)
end
end
只有4个左右的类别,它们不会改变。我只需要在创建资源条目时通过下拉列表分配类别,并列出特定类别下的条目。
现在,我在尝试查看资源/新版时收到错误“未定义方法'类别'。
任何易于理解(rails初学者)帮助表示赞赏
答案 0 :(得分:1)
首先在资源模型上还需要has_and_belongs_to_many
对于输入,您需要添加参数multiple: true
有关详情Rails 3: Multiple Select with has_many through associations
,请参阅此问题的答案您需要在表单上使用类别而不是类别。
答案 1 :(得分:0)
你想要ActsAsTaggableOn!
https://github.com/mbleigh/acts-as-taggable-on
这个辉煌的宝石为您解决了类别问题。但是,这不是您要问的问题......您收到错误是因为您没有正确设置关联。
:categories
multiple: true
以允许多个选择。 <%= f.collection_select :category_ids, Category.all, :id, :name, :prompt => "Category", :multiple => true %>
我强烈建议您查看ActsAsTaggableOn因为文档太棒了。它还有一个RailsCast。