【问题标题】:How to access data sent by user using controller on Ruby on Rails如何在 Ruby on Rails 上使用控制器访问用户发送的数据
【发布时间】:2014-08-24 06:46:08
【问题描述】:

我在保存用户发送的数据并在我的视图文件中使用它时遇到问题,我在其他主题中找不到解决方案。

这是我通过表单选择日期的代码:

<%= select( 'resource', 'field', @benchmark.compositions.find(:all).collect {|u| [u.date_composition] }, :prompt => 'Selected date') %>

这是我获得此选择的控制器:

 def sample_method
  @resource_field = params[:resource][:field]
end

这是我在 routes.rb 文件中的一行:

match 'benchmark/sample_method/:resource/:field', :controller => 'benchmarks', :action => 'sample_method'

现在我想在我的视图中使用选定的值,所以我输入:

<% @resource_field = @benchmark.find(params[:resource][:field]) %>

但它说

ActionView::Template::Error (undefined method `[ ]' for nil:NilClass)

请问如何使用我选择的值?

【问题讨论】:

    标签: ruby-on-rails view controller


    【解决方案1】:

    Params

    问题是您正在尝试访问视图中的 params 哈希

    这不起作用,因为 params 是从请求发送到您的站点的 HTTP values - 仅在每个请求的基础上可用。由于您的视图本质上是另一个请求(有点像重定向),params 在那里不可用

    当您收到错误消息时:

    nil:NilClass 的未定义方法 `[ ]'

    这基本上表示您无法在 params 变量上调用 [],因为该对象是 nil(未填充数据)

    --

    变量

    你需要做的是在你的控制器中设置你的数据,按照MVC programming pattern(你应该永远必须在你的视图中使用ActiveRecord方法btw):

    #app/controllers/your_controller.rb
    Class YourController < ApplicationController
       def action
           @resource_field = @benchmark.find params[:resource][:field]
       end
    end
    

    这应该使这些数据在您的视图中可用,同时使用刚刚传递给 Rails 的 params

    【讨论】:

    • 好的,谢谢,我需要这个。但是我仍然有同样的错误,因为我认为我的 select 函数和我的 sample_method 没有以某种方式链接。当我选择一个日期时,它不会存储在我的控制器中。你有什么想法吗?
    • 在您的更正中,基准必须在属性之间具有资源和字段,还是我完全弄错了?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2013-08-14
    • 1970-01-01
    • 2012-06-27
    • 2010-12-22
    相关资源
    最近更新 更多