【问题标题】:Getting ArgumentError wrong number of arguments (0 for 1)获取 ArgumentError 错误的参数数量(0 表示 1)
【发布时间】:2011-12-05 19:40:18
【问题描述】:

当我运行我的应用程序时,我收到以下错误:

ArgumentError in StatesController#filter

wrong number of arguments (0 for 1)

我的控制器如下所示:

class StatesController < ApplicationController
    def filter(my_string)

        @new_array = []
        @new_array = state.each {|x| if /#my_string/i =~ x then puts x end}
        return @new_array

    end

end

我的观点是这样的:

 <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>States</title>
  </head>

  <body>

        <% States.filter(params[:substring]) %>
        <p><%= @new_array.each %></p>
        <% if @new_array.size = 0 %>
        <p>No matches!</p>

    </body>

</html>

我的代码有什么问题?

非常感谢

【问题讨论】:

    标签: ruby-on-rails controller arguments


    【解决方案1】:

    StatesController 中的过滤器方法是一个动作。此类操作不接受参数。实现您想要做的事情的更好方法是创建一个名为 State 的模型,如下所示。并为其添加过滤方法:

    # app/models/state.rb
    class State
      def filter(params[:my_string])
        @new_array = []
        @new_array = state.each {|x| if /#my_string/i =~ x then puts x end}
        return @new_array
      end
    end
    

    在您的控制器中,您现在应该有如下内容:

    class StatesController < ApplicationController
      def filter
        @states = State.filter(params[:sub_string])
      end
    end
    

    然后在对应的视图中:

    <% if @states.empty? %>
      <p>No matches!</p>
    <% else %>
      <p>
        <% @states.each do |state| %>
          <%= state %>
        <% end %>
      </p>
    <% end %>
    

    这样做是使用模型将数组加载到实例变量中。此实例变量(以 @ 开头)可在控制器操作中呈现的视图中访问。我们使用的动作被指定为过滤器。

    在视图中,我使用空来检查数组中是否有任何结果?方法。否则我只是循环遍历数组。

    现在,这只有在标题中有 params[:sub_string] 时才有效。因此,您需要确保在 url 中有类似 ?sub_string=mystring 的内容。

    鉴于您的问题和您的代码布局,我假设您对 Rails 相当陌生。我真的建议您仔细阅读这里的入门指南:http://guides.rubyonrails.org/getting_started.html

    【讨论】:

    • 非常感谢您非常清晰、易于理解的答案...感谢您提供的链接!!
    • 没问题。周围有几本好书,你也可以看看它们来学习 Rails。我自己没有读过,但我的朋友真的向新人推荐“The Rails 3 way”。
    • 现在还有一个问题——当我尝试测试它时,我得到了以下错误:你没有预料到它有一个 nil 对象!您可能期望有一个 Array 的实例。评估 nil.empty 时发生错误?我怎么无法访问数组?
    • 这可能是控制器动作中的状态变量。您需要将其设置为值。
    猜你喜欢
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多