Rails 4:使用link_to切换布尔值

时间:2017-03-14 18:25:13

标签: jquery ruby-on-rails ajax ruby-on-rails-4

我想通过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 个答案:

答案 0 :(得分:1)

您尚未在网址中设置接受format的路由,因此它将其解释为.2占位符(因此URL中的json,通常是保留的对于pdfcsvmember)等格式。

相反,路线应如下所示,使用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方法一起发布,以点击{{1}}端点。