1

我在构建我想象中的电子商务网站时正在学习狂欢。我注意到没有办法重新订购产品。所以我在数据库中添加了一个字段并扩展了模型。在 IRB/Pry 中一切正常。

现在我将把它作为一项功能添加到 Spree 后端。我在产品选项卡中添加了一个子菜单,并添加了一个新控制器来执行该任务。这个想法是显示文本字段列表并选择并在显示时按字段排序。听起来很简单。

但是当我发布表单时,它会让我退出管理部分并将我重定向到登录页面。我尝试使用 PostMan (chrome) 制作一个空的 HTTP 帖子并得到相同的结果

这是我的内容。

控制器/狂欢/管理员/product_order_controller.rb

class Spree::Admin::ProductOrderController < Spree::Admin::BaseController
  def index
    @products = Spree::Product.order( 'placement_order ASC' )
  end

  def update
  end
end

意见/狂欢/管理员/product_order/index.html.slim

= render :partial => 'spree/admin/shared/product_sub_menu'
h1 Product Order

form method="post" action="/admin/product_order/update"
  h3 Select the order of products :-
  table
    tr
      td Image
      td Name
      td Order

    - @products.each do | product |
      = render :partial => 'spree/admin/product_order/product_order', :locals => { :product => product }
  input type="submit" name="submit" value="Submit"

路线.rb

  match '/admin/product_order'         => 'spree/admin/product_order#index'
  match '/admin/product_order/index'   => 'spree/admin/product_order#index'
  match '/admin/product_order/update'  => 'spree/admin/product_order#update'

在帖子上:它重定向到http://localhost:3000/login

我做错了什么,还是我做的不同?

提前致谢。

祝你星期一过得愉快,我知道……这对我们大多数人来说会很可怕:)

4

1 回答 1

0

我已经玩了一段时间了。起初我以为 CSRF 令牌丢失了。但后来它在页面的标题中。

然后是表格。查看表格,他们缺少一些听起来像安全的隐藏字段。他们就像

<input name="utf8" type="hidden" value="&#x2713;" />
<input name="_method" type="hidden" value="put" />
<input name="authenticity_token" type="hidden" value="[long code]" />

了解我缺少一些东西,而那些通常我们不会手工放置的东西......

我使用了表单助手方法。

= render :partial => 'spree/admin/shared/product_sub_menu'
h1 Product Order

= form_tag( "/admin/product_order/update",  method: "post" ) do
  h3 Select the order of products :-
  table
    tr
      td Image
      td Name
      td Order

    - @products.each do | product |
      = render :partial => 'spree/admin/product_order/product_order', :locals => { :product => product }
  = submit_tag( "Save" )

使用form_tag为我解决了这个问题。

在各种基本hello world类应用程序中,使用裸表单已经奏效。但我认为新的限制来自 Spree 或我选择的其他库。

感谢您的建议。

于 2013-07-30T04:03:28.467 回答