链接点击时更新用户

时间:2014-08-13 20:14:50

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

点击issue.assignee视图中的链接后,我需要更新issues/show字段。将current_user分配给此字段。怎么做?

我必须像这样制作链接吗?

= link_to project_issue_path(issue.project, issue), method: :put 

...

2 个答案:

答案 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)编程模式构建的:

enter image description here

我提到这一点的原因是因为当您在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 - 允许您在屏幕上查看更新的数据!