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 之类的格式@、pdf
或 csv
)。
相反,路线应该如下所示,使用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:真正的奇怪行为