ruby-on-rails - 在 Rails 中使用命名空间模型和 Controller 的问题

标签 ruby-on-rails ruby-on-rails-4

我正在开发一个 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/

相关文章:

ruby-on-rails - 使用 RSpec 进行 Rails 片段缓存测试

ruby-on-rails - ruby on Rails dto 对象 - 你在哪里存储它们?

javascript - 如何隐藏和显示模式的内容?

ruby-on-rails - Rails,当使用 destroy_all 时,有没有办法返回记录数(如果有删除)?

mysql - 将哈希值保存到文本字段中,然后在 where 子句中查询哈希值

ruby-on-rails - 在 Rails button_to 中嵌入 Font Awesome 图标

ruby-on-rails-3 - 使用 Rails 在 Net::HTTP::Get.new 中设置自定义超时

ruby-on-rails - 这些 figaro 配置设置是否适合 heroku 部署?

javascript - Rails 4 - 依赖选择导致错误的急切加载(Rails4/Active Admin)

ruby-on-rails - gem 安装ruby-audio-1.6.1错误(使用Mac OS 10.9/Homebrew)