Rails:参数数量错误(给定1,预期为0)

时间:2017-03-02 06:37:30

标签: ruby-on-rails

我已经创建了复选框,我希望每当我选中复选框时,应该调用一个方法/操作,但是它没有唠叨我猜这个操作仍然没有受到影响而且我收到了错误。

Wrong number of arguments (given 1, expected 0).

我做的是! 在show.html.erb中创建了一个复选框

<%= @files.each do |key,value|%>
  <%=check_box_tag(:key, key,Repository.process)%>
  <%=label_tag(:key)%>
<%end%>
然后

创建了一个名为Repository controller

中的进程的新方法
 def process --> error in this line
      end

并给出路线

post 'repositories/:id/process', to "repositories#process"

2 个答案:

答案 0 :(得分:8)

您在controller中定义了名为process操作方法,但process是rails 基本控制器中已经定义的操作方法

您可以通过提供适当的参数来覆盖它,但不能创建具有相同名称的其他操作方法。

  

http://apidock.com/rails/AbstractController/Base/process

您可以通过更改此类内容来实现所需的功能。

1-在Repository Controller中更改操作的名称。让它命名为generate,因此在控制器中添加以下功能。 (请删除流程)

def generate
  // Write your custom code to process the params[:id]
end

2-在routes.rb文件中添加

post 'repositories/:id/generate' => "repositories#generate", as: 'generate_repository'

3-从

替换checkbox代码
<%=check_box_tag(:key, key,Repository.process)%>

用这个

<%= check_box_tag(:param_name, param_value, false, data: {remote: true, method: :post, url: generate_repository_path(id_you_want_to_send) }) %>

多数民众赞成!当您选中该复选框时,您将在操作方法的params哈希中的param_value中收到param_name。您可以使用params[:param_name]访问它。

每当您收到params[:param_name]中的任何值时,如果值为checkbox,则表示checkednil checkbox unchecked param_name

  

请更改param_valueid_you_want_to_sendx = pandas.pd.read_csv('filename/csv file',header=1,parse_data=True,converters={9:14,lambda x:x.decode('int')})   您想要的变量或值。

谢谢!

答案 1 :(得分:1)

您的流程方法不接受任何参数,但您正在向其发送复选框数据。

复选框标记的语法如下:

check_box_tag(name, value = "1", checked = false, options = {})

您的复选框标记如下所示:

check_box_tag :key, key, Repository.process 

您正在传递一个参数来检查您不应该这样做 也许您只想使用check_box:

check_box(object_name, method, options = {}, checked_value = "1", unchecked_value = "0")

此外,要在单击复选框时触发方法调用,您必须添加remote:true选项并通过Ajax发送它。

我建议使用链接而不是实际的复选框,因为它更容易和更清洁。希望这会有所帮助。