首页 > 解决方案 > 从 form_for rails 调用动作?

问题描述

我想从 a 调用特定操作form_for并传递参数。

我有一个 form_for 像这样传递日期:

<%= form_for(:start_end_dates, url: url_for(controller: 'company_dashboard', action: 'shopify_orders_sync'), method: :get) do |f| %>
   <%= f.date_field :start_date, class: "form-control", required: true %>
   <%= f.date_field :end_date, class: "form-control", required: true %>
   <%= f.hidden_field :shop_id, value: @shop.id %>
   <%= f.submit "Apply" %>
<% end %>

但是这种尝试似乎并没有调用该方法:

  def shopify_orders_sync
    @start_date = params[:start_date]
    @end_date = params[:end_date]
    @shop = Shop.find(params[:shop_id])
    if (params[:start_end_dates] && params[:start_end_dates][:start_date] && params[:start_end_dates][:end_date])
      start_date = params[:start_end_dates][:start_date].to_date.beginning_of_day
      end_date = params[:start_end_dates][:end_date].to_date.end_of_day
      if(start_date > end_date)
        ...
      else
        shop = Shop.find(params[:shop_id])
        session = ShopifyAPI::Session.new(domain: shop.shopify_domain, token: shop.shopify_token, api_version: '2019-04')
        ShopifyAPI::Base.activate_session(session)
        ...
        ...
        ...
        ...
        ... 
        ...
      end
    end
  end

路线:

  get 'company/dashboard' => 'company_dashboard#dashboard'
  get 'company/shopify-orders-sync' => 'company_dashboard#shopify_orders_sync'

此表单位于#dashboard 视图中。

如果我做类似的事情:

<%= form_for(:start_end_dates, url: company_orders_path, method: :get) do |f| %>
  <%= f.date_field :start_date, class: "form-control", required: true %>
  <%= f.date_field :end_date, class: "form-control", required: true %>
  <%= f.submit "Apply", class: "btn btn-primary" %>
<% end %>

控制器:

def orders
    ...
    if (params[:start_end_dates] && params[:start_end_dates][:start_date] && params[:start_end_dates][:end_date])
      start_date = params[:start_end_dates][:start_date].to_date.beginning_of_day
      end_date = params[:start_end_dates][:end_date].to_date.end_of_day
      if(start_date > end_date)
        redirect_to vendor_dashboard_path
        flash.keep[:notice] = "Dates are in wrong order."
      else
         ...
      end
      ...
    else
       ...
    end
    ...
  end

路线:

get 'vendor/orders' => 'vendor_dashboard#orders'

这工作,至少从供应商/订单路线。其他地方没试过。表单位于#orders 中并调用#orders 操作。

我可以对表单做些什么来保持一切正常,然后调用操作/方法def shopify_orders_sync

**

尝试:

**

<%= form_for :start_end_dates, url: '/company/shopify_orders_sync', method: 'get' do |f| %>

结果:

at=info method=GET path="/company/shop-orders?shop_id=31"
at=info method=GET path="/favicon.ico"
Started GET "/company/shop-orders?utf8=%E2%9C%93&start_end_dates%5Bstart_date%5D=2019-10-01&start_end_dates%5Bend_date%5D=2019-10-08&start_end_dates%5Bshop_id%5D=31&commit=Apply" for 69.118.200.110 at 2019-10-08 08:59:04 +0000
Processing by CompanyDashboardController#shop_orders as HTML
Parameters: {"utf8"=>"✓", "start_end_dates"=>{"start_date"=>"2019-10-01", "end_date"=>"2019-10-08", "shop_id"=>"31"}, "commit"=>"Apply"}
Rendering company_dashboard/shop_orders.html.erb within layouts/application
Rendered company_dashboard/shop_orders.html.erb within layouts/application (139.8ms)
Rendered layouts/_argon-navbar.html.erb (1.0ms)
Rendered layouts/_footer.html.erb (0.4ms)
Completed 200 OK in 161ms
at=info method=GET path="/company/shop-orders?utf8=%E2%9C%93&start_end_dates%5Bstart_date%5D=2019-10-01&start_end_dates%5Bend_date%5D=2019-10-08&start_end_dates%5Bshop_id%5D=31&commit=Apply" 
at=info method=GET path="/favicon.ico"

我已经对上述 form_for 进行了多次迭代,但结果都相同。

标签: ruby-on-railsruby

解决方案


推荐阅读