我正在开发一个 Ruby on Rails 应用程序,我正在尝试更好地组织我的代码。该应用程序的一部分是一个知识库,它按类别和文章组织 - 非常标准的东西。
这是我设置一切的方式(至少我认为重要的是):
routes.rb
namespace :knowledgebase do
resources :categories
resources :articles
end
models/knowledgebase/article.rb
class Knowledgebase::Article < ActiveRecord::Base
self.table_name = 'knowledgebase_articles'
belongs_to :category, class_name: 'Knowledgebase::Category', foreign_key: 'knowledgebase_category_id'
end
models/knowledgebase/category.rb
class Knowledgebase::Category < ActiveRecord::Base
self.table_name = 'knowledgebase_categories'
has_many :articles, class_name: 'Knowledgebase::Article'
end
controllers/knowledgebase/articles_controller.rb
class Knowledgebase::CategoriesController < ApplicationController
load_and_authorize_resource
before_action :authenticate_user!
before_action :set_category, only: [:show, :edit, :update, :destroy]
def new
@category = ::Knowledgebase::Category.new
end
def create
@category = ::Knowledgebase::Category.new(category_params)
if @category.save
redirect_to knowledgebase_categories_url, notice: '...'
else
render :new
end
end
# ...
private
def set_category
@category = ::Knowledgebase::Category.find(params[:id])
end
def category_params
params.require(:category).permit(:title)
end
end
views/knowledgebase/categories/_form.html.erb
<%= form_for @category do |form| %>
<%= form.text_field :title
<%= form.submit %>
<% end %>
我的问题:当我尝试提交表单(新建 或编辑)时出现错误:
param is missing or the value is empty: category
当我像这样设置表单时:<%= form_for ([:knowledgebase, @category]) do |form| %>
我收到以下错误:
undefined method `knowledgebase_knowledgebase_categories_path' for #<#<Class:0x007fecd7a78908>:0x007fecd707ad20>
文章也是如此。我正在使用 Rails 4.2.3。
如果有人能帮助我或引导我走向正确的方向,我将非常感激 - 我已经用谷歌搜索了三天,现在我尝试了我能想到的一切。
更新 1
这是生成的参数日志:
{"utf8"=>"✓",
"authenticity_token"=>"fjOs...VA==",
"commit"=>"Category erstellen",
"knowledgebase_category"=>{"title"=>"Test Title"}}
最佳答案
当您查看params hash 时,它有knowledgebase_category
而不是category
。所以尝试将 category_params
更改为以下
def category_params
params.require(:knowledgebase_category).permit(:title)
end
一个建议:
始终查看日志中的生成的参数。它确实有助于找到大多数错误的解决方案。
关于ruby-on-rails - 在 Rails 中使用命名空间模型和 Controller 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31791095/