我有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] 删除。
我来说两句