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