【问题标题】:using form rails in different controller在不同的控制器中使用模板
【发布时间】:2020-04-04 07:48:11
【问题描述】:

我有这样的视图 "app/views/admin/index.html.haml" ,在我创建的这个文件中

.container
  .d-flex.flex-column.justify-content-center
    = render partial: 'add_product'

我渲染另一个partial 用于创建产品

我在管理目录"app/views/admin/_add_product.html.haml" 上创建另一个部分:

.p-2
  .d.flex.flex-column.justify-content-center
    = form_for(@product) do |f|
      .form-group.row
        = f.label :name,  class: 'col-sm-2 col-form-label'
        %br/
        .col-sm-10
          = f.text_field :name, class: 'form-control'

关于产品控制器"app/controller/products_controller.rb"

class ProductsController < ApplicationController

  def index
  end

  def new
    @product = Product.new
  end

  def create
    @product = Product.new product_values
  end

  private

  def product_values
    params.require(:product).permit(:name, :stock, :image, :price, :desc)
  end

end

所以当我转到“/admin”的路线时,似乎没有创建“表单”

它说:First argument in form cannot contain nil or be empty 问题出在_add_product.html.haml,它没有读取我在控制器上创建的@product 的值,

知道如何在控制器上使用不同的视图吗??

在我的路线上:

resources :products

【问题讨论】:

  • 所以你点击/admin,控制器操作在哪里?你需要在那里定义@product
  • 我可以不用管理员的控制器来做这个吗,我想用产品控制器来定义这个??

标签: ruby-on-rails ruby


【解决方案1】:

您已为@product 赋值。

class AdminController < ApplicationController
  # GET /admin
  def index
    @product = Product.new
  end
end

您也可以通过提供默认值在部分本身中执行此操作:

= form_for(@product || Product.new) do |f|

【讨论】:

  • 得到错误uninitialized constant AdminController::Product
  • 这很奇怪,Rails 无法自动加载常量只是因为它在不同的控制器中是没有意义的。如果您使用 ::Product.new 明确引用它,您是否会收到缺少常量的错误?
  • 冒着明显的风险,你真的有Product 模型吗?
  • 是的,我像你说的那样说,但是这种方式可以工作= form_for :product, :url =&gt; {:controller =&gt; 'products', :action =&gt; 'create'} do |f|,我不知道为什么,这是正确的语法吗??
  • 这真的和打电话给form_for(@product)完全一样。
【解决方案2】:

另一个答案几乎是正确的,但我忘了创建product.rb 的模型 所以我创建了它,然后更改了路线:

resources :products, controller: 'admin'

它解决了我的问题:D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 2020-02-08
    • 2011-03-10
    相关资源
    最近更新 更多