2

您好,我是 Rails 的绝对新手。创建一些应用程序但停留在某个点。

问题是我想根据用户 ID 在产品中插入数据,但它说:

未初始化的常量 ProductController

这是我的路线文件:

Rails.application.routes.draw do
  #devise_for :users
  devise_for :users, :controllers => { :registrations => 'users/registrations' }
  resources :dashboard
  root to: "home#index"

  namespace :user do
    resources :users
  end

  resources :product
end

这是我的产品控制器,即 product_controller.rb:

class Product::ProductController < ApplicationController
  def new
    @product = Product.new
  end

  def create
    @product = Product.new(params[:product])
    if @product.save
      flash[:success] = "Product Added"
      redirect_to product_index_path
    else
      flash[:success] = @product.errors.full_messages.join
      redirect_to :back
    end
    end
  end

这是我的 new.html.erb 代码:

<h2>Add Product</h2>

<%= form_for(resource, :as => resource_name, :url => user_registration_path) do |f| %>

  <div class="field">
    <%= f.label :product_name %><br />
    <%= f.text_field :product_name, autofocus: true %>
  </div>

<%= p.hidden_field :user_id, :value => current_user %>

  <div class="actions">
    <%= f.submit "Add Product" %>
  </div>
<% end %>

<% end %>

我也知道这件事是错的:

<%= form_for(resource, :as => resource_name, :url => user_registration_path) do |f| %>

我怎样才能把所有的部分合二为一?我的目标是使用新页面添加产品名称并重定向到产品列表页面。

4

2 回答 2

0

将您的控制器重命名为products_controller.rb

然后改变

class Product::ProductController < ApplicationController
  -------------
end

class Product::ProductsController < ApplicationController
  -------------
end

甚至路线也需要改变。如果您希望产品控制器product在您的问题中提到的命名空间内,那么您必须声明路由,如下所示。

namespace :product do
    resources :products
end
于 2015-07-07T11:20:39.170 回答
0

将您的控制器重命名为products_controller.rb

然后改变

class Product::ProductController < ApplicationController
  -------------
end

class Product::ProductsController < ApplicationController
  -------------
end

并且路由文件应该这样更改

  namespace :product do
    resources :products
  end

代替resources :product

于 2015-07-07T11:32:11.243 回答