簡體   English   中英

獲取ArgumentError錯誤的參數數量(0表示1)

[英]Getting ArgumentError wrong number of arguments (0 for 1)

運行我的應用程序時,出現以下錯誤:

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>

我的代碼有什么問題?

非常感謝

您在StatesController中擁有的filter方法是一個動作。 此類操作不接受參數。 實現您要執行的操作的一種更好的方法是像這樣創建一個稱為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]的情況下才有效。 因此,您需要確保網址中包含?sub_string=mystring之類的內容。

考慮到您的問題和代碼布局,我認為您是Rails的新手。 我真的建議您在這里仔細閱讀入門指南: http : //guides.rubyonrails.org/getting_started.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM