【问题标题】:Missing params when using a partial使用部分时缺少参数
【发布时间】:2020-10-13 00:05:43
【问题描述】:

让我开始,我是 Rails 的新手,到目前为止,我已经能够解决我迄今为止遇到的所有问题。我可以确认我的数据库已设置并且关系正常。这是我的问题,该应用程序类似于项目管理工具。我的用户可以创建滑雪交换然后搜索供应商,然后我使用 javascript(ajax) 呈现结果,因此我不必重新加载页面。我添加了一个徽章,以便我可以使用它来将用户添加为供应商。截至目前,我可以让用户参数没有问题,但我似乎无法让我尝试过的skiswap参数。如果我对其进行硬编码,它将起作用,所以我很接近但无法弄清楚

在我的内心 skiswap#index 我有这个用于搜索 在这个上面我使用@skiswap

    <%= form_tag search_vendors_path, remote: true, method: :get do %>
    <div class='form-group row'>
      <div class ="input-group col-sm-3">
        <%= text_field_tag :search, params[:search], placeholder: "Shop name, email, or contact...", autofocus: true, class: "form-control form-control-sm"%>
        <div class="input-group-prepend">
          <%= button_tag type: :submit, class: "btn btn-info btn-sm", id: "small-serach" do %>
          <i class="fas fa-search" id = "search-icon"></i>
        <% end %>
      </div>
      </div>
    </div>
  <% end %>

我的搜索正在工作,这就是我在 VendorController 中的内容

  def search
    @users = User.where(["concat_ws(' ' , first_name, last_name, email, company ) ILIKE ?", "%#{params[:search]}%"])
    respond_to do |format|
      format.js{ render partial: 'skiswaps/result'}
    end
  end

我的结果在这里,这是我用来添加新供应商的徽章,目前我对其进行了硬编码,因为我无法弄清楚。我正在为我的结果使用 j 渲染...我已经尝试过skiswap_vendors_path(vendor: user,skiswap_id:@skiswap.id) 也skiswap_vendors_path(vendor: user,skiswap:@skiswap) @skiswap 显示为nil。不确定是否因为我的结果是部分的一部分,它们似乎没有显示页面中应该显示的参数。

<% @users.each do |user| %>
      <tr>

        <td><%= link_to "Add", skiswap_vendors_path(vendor: user, skiswap_id: 4),
                                      class: "badge badge-success", method: :post %></td>
        <td> <strong>Shop: </strong><%= user.company  %> </td>
        <td> <strong>Contact: </strong><%= user.first_name  %> <%= user.last_name %>, <%= user.email%></td>
      </tr>
    <% end %>

然后在我的 VendorController 中创建这个,只有在我对其进行硬编码时才有效

  def create
   vendor = User.find(params[:vendor])
   skiswap = Skiswap.find(params[:skiswap_id])
    skiswap.vendors.build(user_id: vendor.id)
    if skiswap.save
      flash[:notice] = "You add #{vendor.company} as a vendor"
    else
      flash[:notice] = "Sorry something went wrong, try again later"
    end
  end

这就是我所拥有的路线

  get 'search_vendors', to: 'vendors#search'
  resources :skiswaps do
    resources :vendors
  end

【问题讨论】:

  • @skiswap 没有在search 操作中初始化,它应该来自哪里?
  • 它在索引中初始化(skiswap控制器),我的搜索结果显示在skiswap索引页面...我不知道如何通过搜索动作初始化...我明白你的意思了现在正在说。我确实尝试在点击搜索时传递skiswap参数,但得到了两个很多参数
  • @Eyeslandic 谢谢你,我只是需要有人指出这一点。我添加了一个 来传递额外的变量
  • 很高兴为您提供帮助,祝您好运

标签: ruby-on-rails ajax parameters partial


【解决方案1】:

我必须添加一个隐藏字段标签才能通过@skiswap.id

  <%= form_tag search_vendors_path, remote: true, method: :get do %>
    ....
          <%= hidden_field_tag :skiswap_id, @skiswap.id %>
  
  <% end %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多