【问题标题】:Ransack search in show action updates associated object's user_id显示操作中的 Ransack 搜索更新关联对象的 user_id
【发布时间】:2017-10-26 15:11:59
【问题描述】:

我想使用 Ransack gem 在用户的显示视图中搜索属于useroperators 列表。但是我得到了一个完全出乎意料的结果。它会更新操作员的 USER_ID。

检查一下:

我正在使用 Rails 5 和 ransack gem。我在用户的显示视图上有一个搜索表单。这是表格:

<%= search_form_for @q, url: current_user, class: "form-group input-group-btn" do |f| %>

当我搜索时,会发生以下情况:

(0.5ms)  BEGIN
SQL (0.9ms)  UPDATE "operators" SET "user_id" = NULL WHERE "operators"."user_id" = $1 AND "operators"."id" = 3  [["user_id", 3]]
(0.8ms)  COMMIT

所以,这个搜索表单正在更新关联的关联对象的 user_id。

这是我在用户控制器中的显示操作:

def show
    @user = User.find(params[:id])

    @q = @user.operators.ransack(params[:q])
    @user.operators = @q.result(distinct: true).order("created_at ASC")
end

这是完整的表格:

<%= search_form_for @q, url: current_user, class: "form-group input-group-btn" do |f| %>

 <div class="input-group">

   <%= f.search_field :name_cont_any, class: "form-control" %>

     <span class="input-group-btn">

     <%= button_tag( :class => "btn btn-primary") do %>
       <i class='fa fa-search'></i>
     <% end %> 

  </span>

 </div>

<% end %>

【问题讨论】:

    标签: ruby-on-rails ransack


    【解决方案1】:

    只发送@operators 变量

    def show
        @user = User.find(params[:id])
    
        @q = Operator.where(user_id: current_user).ransack(params[:q])
        @operators = @q.result(distinct: true).order("created_at ASC")
    end
    

    【讨论】:

    • 只需将@q = Operator.where(user_id: current_user).ransack(params[:q]) 更改为@q = Operator.where(user_id: @user).ransack(params[:q])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多