Rails 4:使用 link_to 切换布尔值

Posted

技术标签:

【中文标题】Rails 4:使用 link_to 切换布尔值【英文标题】:Rails 4: Toggling a boolean value with link_to 【发布时间】:2017-08-05 05:55:18 【问题描述】:

我想做一个链接以通过 ajax 更改布尔值。

首先,我尝试了this tutorial,但它在rails 4 上效果不佳。

我希望有人能阐明使其发挥作用的最佳实践。

我目前有下面的代码。

#ROUTE
scope 'admin', :module => "admin" do

    resources :users do
      collection do
        put 'toggle/', :action => :toggle_approve

      end
    end

  end

#CONTROLLER
def toggle_approve
  @user = User.find(params[:id])
  @user.toggle!(:approved)
  render :nothing => true
end

<!-- VIEW -->
<% @users.each do |u| %>
                <tr class="gradeA">
                  <td><%= u.name %> <%= u.last_name %></td>
                  <td><%= u.country %></td>
                  <td><%= u.created_at.strftime("%d/%m/%Y - %H:%M") %></td>
                  <td>
                    <%= link_to '<i class="fa fa-pencil"></i>'.html_safe, edit_user_path(u), class: 'btn btn-icon-toggle', "data-toggle "=> "tooltip", "data-placement" => "top", "data-original-title" => "Edit User" %>
                    <%= link_to '<i class="fa fa-trash-o"></i>'.html_safe, url_for(:controller => "users", action: :destroy, id: u.id), method: :delete, data: confirm: "Are you sure?", class: 'btn btn-icon-toggle', "data-toggle "=> "tooltip", "data-placement" => "top", "data-original-title" =>"Delete" %>

                    <%= link_to "approve", toggle_users_path(u), :remote => true %>
                  </td>
                </tr>
              <% end %>

路径 toggle_users_path(u) 返回 users/toggle.2 而不是 users/toggle/2

有人有更好的方法来使用 remote: true 让它以更好的方式工作吗?

谢谢!

【问题讨论】:

【参考方案1】:

您尚未设置在 URL 中接受 id 的路由,因此它会将其解释为 format 占位符(因此 URL 中的 .2,通常保留用于 @987654324 之类的格式@、pdfcsv)。

相反,路线应该如下所示,使用member 而不是collection

resources :users do
  member do
    put 'toggle', :action => :toggle_approve
  end
end

这会将模式从用户的id 中挂起,如下所示:

/users/:user_id/toggle

然后在你的视图中试试这个:

<%= link_to "approve", toggle_user_path(u), :method => :put, :remote => true %>

如您所见,您还需要将其与put 方法一起发布以访问您的put 端点。

【讨论】:

以上是关于Rails 4:使用 link_to 切换布尔值的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4 link_to方法::post和remote:真正的奇怪行为

Rails 切换布尔值

在rails中带有jquery参数的link_to

Rails如何将link_to用于外部网站并使用块?

在这种情况下,如何以 RESTfully 方式使用 Rails 帮助程序 link_to?

使用 link_to Rails 设置会话变量