点击issue.assignee
视图中的链接后,我需要更新issues/show
字段。将current_user分配给此字段。怎么做?
我必须像这样制作链接吗?
= link_to project_issue_path(issue.project, issue), method: :put
...
答案 0 :(得分:1)
您可以使用标准表单,假设受让人是问题表中的一列。
使用预先填充了current_user的隐藏字段。提交表单后,您将把current_user保存到issue.assignee列。
即
<%= form_for @issue do |f| %>
<%= f.hidden_field :assignee, :value => "#{current_user.id}" %>
<%= f.submit "Assign Current User %>
<% end %>
编辑 - 然后您可以将其添加到任何视图
答案 1 :(得分:1)
<强> MVC 强>
您需要了解Rails是基于MVC (Model View Controller)编程模式构建的:
我提到这一点的原因是因为当您在Rails中创建一项功能(通常称为action
)时,您必须创建正确的controller#action
以帮助其正常工作正确地:
#config/routes.rb
resources :projects do
resources :issues do
put :assign #-> domain.com/projects/:project_id/issues/:id/assign
end
end
这将允许您创建相应的controller
操作来处理更新:
#app/controllers/issues_controller.rb
Class IssuesController < ApplicationController
def assign
@issue = Issue.find parmas[:id]
@issue.assignee = current_user.id
end
end
这意味着您可以向此操作发送简单的PUT
请求(无需任何表单),如下所示:
#app/views/issues/show.html.erb
<%= link_to "Update Assign", project_issue_path(issue.project, issue), method: :put %>
-
<强>编程强>
您提出的问题基本上就是*&#34;我如何做到这一点,以便我的链接 &#34; *
答案很简单 - 您只需要确保具有后端功能来处理您要发送的请求。正如MVC原则所规定的那样 - 你的观点&#34;实际上是最后 - 首先加载控制器
每次通过路由向Rails发送请求时,您基本上都会获得中间件&#34;路由&#34;您对特定controller#action
的请求。然后,控制器将从中间件中提取params
,将其应用于您的操作中定义的功能,然后将其传递给您的Model
。
最后,控制器为您的请求呈现相应的view
- 允许您在屏幕上查看更新的数据!