【问题标题】:How do I Send a Value From a View to a Controller如何将值从视图发送到控制器
【发布时间】:2020-08-12 21:42:01
【问题描述】:

我正在尝试获取数据库表中新创建行的 ID,以便以后可以使用它。但它不会通过它只停留在查看器中。关闭选项卡或窗口后,我需要该 ID。我知道可能有其他方法可以找到该行的 id,但由于一些更改,网站需要使用 id 来完成。

当查看器被访问时,它会通过一些 ruby​​ on rails 语句。

<% if user_signed_in? %>
  <% @att_record = Attendance.new(:user_id => current_user.id, :time_in => Time.now) %>
  <% #@attendance_log = @att_record #tried this already, controller doesn't receive it %>
  <%= hidden_field_tag :@get_int, :value => @att_record.id %>
  <% @att_record.save %>

有人建议我使用 hidden_​​field_tag 来获取整数,但我无法让它工作。

一旦窗口关闭,它应该能够使用整数。关闭窗口后,将执行以下函数。

def unload

   @get_int

   @attendance_log = Attendance.find_by(id: get_int)

   @attendance_log.time_out = Time.now
   @attendance_log.save

   head :ok
end

@att_record 是在视图中创建的,而 get_int 和出席日志是在卸载函数中创建的。

【问题讨论】:

标签: ruby-on-rails ruby view controller hidden-field


【解决方案1】:

这里有几点需要考虑:

  1. 在视图中创建记录不是一个好习惯。 (@att_record.save)
  2. 在 hidden_​​field_tag 中,您甚至在创建记录之前就发现了价值 (@att_record.id)。所以它的值为 nil
  3. 传递的属性值可以在控制器的params中找到。

只是一个快速解决问题的方法是: 保存后设置隐藏字段。

  <% @att_record.save %>
  <%= hidden_field_tag :attr_record_id, :value => @att_record.id %>

在控制器中访问它

@attendance_log = Attendance.find_by(id: params[:attr_record_id])

注意:我强烈建议使用适当的控制器流创建记录,而不是在视图中。

【讨论】:

  • 尝试使用 hidden_​​field_tag 显示给我的方式,它没有被存储。为了在使用我使用 print "val = #{params[:attr_record_id]}" 的方法后对其进行测试,并且在 params 位置什么也没有得到。我什至用其他参数对其进行了测试,它们确实得到了显示,但这个没有。
猜你喜欢
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多