Rails:如何制作一个调用自定义控制器方法的按钮?

点头

我有entry一个具有字段的模型done:boolean
我想在条目索引上创建一个按钮“标记为完成”,将该条目设置done为 true。条目

在条目控制器中:

def set_done
  @entry = Entry.find(params[:entry_id])
  @entry.done = true
end

在条目索引(查看)中:

<% @entries.each do |entry| %>
  <% if entry.user.id == @user %>
    <tr>
      <td><%= entry.content %></td>
      <td><%= entry.due_date %></td>
      <td><%= entry.user_id %></td>
      <td><%= entry.done %></td>
      <td><%= link_to 'Mark as Done',  entry_set_done_path(entry), method: :put %></td>
      <td><%= link_to 'Edit', edit_entry_path(entry) %></td>
      <td><%= link_to 'Destroy', entry, method: :delete, data: { confirm: 'Are you sure?' } %></td>
    </tr>
  <% end %>
<% end %>

在路线中:

resources :entries do
  resources :tags
  put '/set_done', to: 'entries#set_done'
end

结果rails routes

entry_set_done   PUT     /entries/:entry_id/set_done(.:format)     entries#set_done

没有错误(保持在同一页面上),但 done 的值不会改变 Bash Console rails 服务器输出

Started PUT "/entries/15/set_done" for ::1 at 2020-01-01 20:38:32 +0800
Processing by EntriesController#set_done as HTML
Parameters: {"authenticity_token"=>"CCjQWigTo19T7RKNMHpOZI05t/2z36iCr1yZCFB5fBxp75wJFF9rFtMlQOO0wPuxytRzFNkF+fczNUFNHRyDtw==", "entry_id"=>"15"}
User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["id", 1], ["LIMIT", 1]]
No template found for EntriesController#set_done, rendering head :no_content
Completed 204 No Content in 6ms (ActiveRecord: 0.2ms | Allocations: 2031)
亚历克斯·拜丹

从错误中可以看出,您通过了GET- 但您的路线正在等待PUT.

您可以将:method选项传递link_to给设置正确的选项文档

所以结果将是这样的

<% @entries.each do |entry| %>
  <% if entry.user.id == @user %>
    <tr>
      <td><%= entry.content %></td>
      <td><%= entry.due_date %></td>
      <td><%= entry.user_id %></td>
      <td><%= entry.done %></td>
      <td><%= link_to 'Mark as Done', method: :put,  entry_set_done_path(entry), method: :put %></td>
      <td><%= link_to 'Edit', edit_entry_path(entry) %></td>
      <td><%= link_to 'Destroy', entry, method: :delete, data: { confirm: 'Are you sure?' } %></td>
    </tr>
  <% end %>
<% end %>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当我单击按钮 Rails 时,从视图中调用自定义控制器操作

如何从自定义位置管理器调用另一个视图控制器类中的 didUpdateLocation?

自定义模式解雇过渡后,不会调用第一个视图控制器的生命周期方法

在API控制器中调用自定义方法

如何从角度控制器调用自定义指令

如何在另一个控制器的方法中调用一个控制器的方法

Rails - 如何将控制器中的自定义方法更改为常规方法?

如何在控制器中调用$ resource自定义方法

如何从 .net core 2.1 mvc 中的控制器调用自定义身份注册方法

如何创建一个在不更改视图的情况下调用控制器中的方法的按钮?

单击一个按钮,在ASP.NET中的控制器中调用方法

在情节提要中,如何制作自定义单元以与多个控制器一起使用?

从Rails中的另一个控制器调用方法

Rails:从控制器调用另一个控制器动作

调用另一个控制器的方法

播放2.5.x java-如何从另一个控制器调用控制器方法?

从另一个控制器内的指令内部定义的一个控制器调用方法:AngularJS

为 angular ui grid 中的所有自定义过滤器设置一个控制器

每个资源一个Web API控制器还是更少的具有更多自定义操作的控制器?

如何从控制器动作中调用另一个控制器动作?

如何从Mvc中的控制器调用另一个控制器操作

如何从自定义Gson JsonSerializer调用另一个序列化器?

如何使用 RSpec 测试在控制器方法中调用了一个类

如何传递一个值,在控制器类中的方法调用一个新的页面的方法?

Rails控制器-继承自定义操作

如何从另一个Rails控制器访问方法

如何在 AngularJs 1.7.x 中从一个控制器调用方法到另一个控制器,以刷新 UI 数据

如何在另一个视图控制器中调用另一个方法?

调用对象并将其传递给控制器中的自定义方法