【问题标题】:Edit value in table via button click (Ruby on Rails)通过按钮单击编辑表中的值(Ruby on Rails)
【发布时间】:2012-12-20 16:10:33
【问题描述】:

我有点惭愧,因为现在有 2 个多小时了,我不知道该怎么做。但我对 Rails 还很陌生,所以请耐心等待 :)

我有两组用户:海报和实干家 然后是一个模型“作业”。作业由海报创建(与它们有belong_to 关系)。 然后,Doers 可以从未分配的池中选择分配并将它们分配给自己(这就是为什么 Assignments 也与 Doers 具有belong_to 关系)。

在页面本身我现在有这个代码(在过去的一个小时里改变了 20 次):

<table class="table">
  <thead>
    <tr>
      <th>Title</th>
      <th>Assign to me</th>
    </tr>
  </thhead>      
  <tbody>
    <% @assignments.each do |assignment| %>
      <tr>
        <td><%= assignment.title %></td>
        <td>
           <%= link_to(edit_assignment_path(assignment), :doer => current_doer.id, confirm: 'Really take this assignment on?') do%>
             <i class="icon-folder-open", alt="assign"></i>
           <% end %> 
        </td>
      </tr>
    <% end %>
  </tbody>
</table>

在 AssignmentController 中使用此代码:

def edit
  @assignment = Assignment.find(params[:id])
  @doer = Doer.find(params[:doer])
  if @patient.assign(@doer)
    redirect_to dashboard_index_path, notice: 'Successfully assigned to you'
  else
    redirect_to dashboard_index_path, alert: 'Error while trying to assign to you'
  end
end

这在 Assignment.rb 中:

def assign(current_doer)
  if self.doer_id != nil then 
    false 
  else 
    self.doer_id << current_doer
    true
  end
end

如您所见,在此示例中我以 Doer 身份登录。而且我一生都无法弄清楚如何正确和干净地做到这一点!

我还尝试了 link_to 代码部分、assign 函数等的变体。 目前我收到错误,@doer = Doer.find(params[:doer]) 无法搜索 Nil 的 id。我知道这意味着我并没有真正正确地发送 doer_id 参数,但我的初学者知识已经结束。

非常感谢您在这里帮助我。

您好, 王者荣耀

【问题讨论】:

    标签: ruby-on-rails button controller icons


    【解决方案1】:

    你几乎是对的,当使用带有块的 link_to 时,它接受参数的方式会发生一些变化。像这样使用路径助手传递您的参数。

    <%= link_to(edit_assignment_path(assignment, doer: current_doer.id), confirm: 'Really take this assignment on?') do %>
      <i class="icon-folder-open", alt="assign"></i>
    <% end %>
    

    【讨论】:

    • 像魅力一样工作 :) 非常感谢(尽管,我认为您在代码中错过了右括号;))。你知道是否有办法让这更“安全”吗?我目前正在使用设计,我希望 Doers 只能在分配显示在池中时接受它。目前,我可以编辑我的地址并接受任何阶段的作业以及不是我的实干家。 :)
    • 为了检查用户,只需将params[:doer] 值与控制器中的current_doer 进行比较,这应该可以防止您分配给除您自己以外的其他用户。至于池,我不确定你用什么来跟踪状态变化,但如果你正在跟踪一个分配何时被认为可以被接受,就像一个数据库,那么你也可以在你的控制器中使用它,只是在分配某人之前检查分配的任何您认为是就绪状态的状态。希望这会有所帮助。
    猜你喜欢
    • 2018-01-15
    • 2015-06-25
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 2023-03-26
    • 2015-05-21
    相关资源
    最近更新 更多