Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails中使用form_tag undefined方法_Ruby On Rails - Fatal编程技术网

Ruby on rails 在rails中使用form_tag undefined方法

Ruby on rails 在rails中使用form_tag undefined方法,ruby-on-rails,Ruby On Rails,我在rails中的form_标签上遇到问题。它告诉我有一个未定义的方法或局部变量叫做sendrequest。然而,我已经在我的控制器中定义了这一点。我错过了什么?PS我是rails新手,所以如果你看到任何不好的语法,请告诉我。谢谢 这是my home.html.erb: <% form_tag sendrequest %> <%=check_box_tag "friendids[]", 12345 %> <%=check_box_tag "frie

我在rails中的form_标签上遇到问题。它告诉我有一个未定义的方法或局部变量叫做sendrequest。然而,我已经在我的控制器中定义了这一点。我错过了什么?PS我是rails新手,所以如果你看到任何不好的语法,请告诉我。谢谢

这是my home.html.erb:

<% form_tag sendrequest %>
    <%=check_box_tag "friendids[]", 12345 %> 
    <%=check_box_tag "friendids[]", 67890 %>
    <%= submit_tag "send requests"%>
<% end_form_tag %>
我的路线只是将游戏页面发送到主页

root to: 'game_pages#home'
match '/home', to: 'game_pages#home'
复选框的用途是获取用户想要选择的朋友列表。然而,我不需要将其添加到数据库中,这就是为什么我没有任何朋友的模型。我想使用一些javascript,以便提交表单时可以遍历FriendsID并使用它们执行一些功能。因此,我不需要保留好友模型,并且复选框实际上不会为当前用户更新任何模型


我在这里遗漏了什么?

如果要在视图中使用控制器中的方法,必须告诉视图上下文在控制器中使用helper\u方法将其包括在内

class GamePagesController < ApplicationController

  def sendrequest
  end
  helper_method :sendrequest
end
除非您在控制器中实际使用该方法,否则它实际上属于帮助器模块,在这种情况下,它将自动包含在视图上下文中

此外,您的代码还有一些问题

<%= form_tag sendrequest do %>
  <%= check_box_tag 'friendids[]', 12345 %>
  <%= check_box_tag 'friendids[]', 67890 %>
  <%= submit_tag 'send requests' %>
<% end %>

基本上,表单标记需要包装在输出erb中,而不是普通的erb中,否则它将不会将代码输出到缓冲区。并且没有end_form_标记,而是使用普通的rubydo/end块语法。该块中的任何内容都将被包装在表单标记中。

如果希望表单转到sendrequest操作,则需要设置路由并在表单中使用该路由

# routes
match '/sendrequest' => 'game_pages#sendrequest', as: :sendrequest

# view
<%= form_tag sendrequest_path do %>

这是应该如何设置的。将视图中的url与控制器中的操作相匹配。

这可能会修复错误,但不会修复真正的问题。真正的问题是设置一个应该到sendrequest操作的路由。@jvnill为什么这是一个更好的解决方案?忘记缩进块了,代码更正现在就在那里。是的,需要有一条路线。form_标记的路径是提交表单时应该传递到路由的操作。@Cluster感谢您清理了我的代码并解释了解决方案。不过,我会接受jvnill的,因为它似乎是更正确的解决方案。不过也谢谢你的帮助!
class GamePagesController < ApplicationController

  def sendrequest
  end
  helper_method :sendrequest
end