1

我在使用 rails 中的 form_tag 时遇到问题。它告诉我有一个未定义的方法或名为 sendrequest 的局部变量。但是我已经在我的控制器中定义了这个。我错过了什么?(PS 我是 Rails 新手,所以如果你看到任何不好的语法,请告诉我)。谢谢!

这是我的 home.html.erb:

<% form_tag sendrequest %>
    <%=check_box_tag "friendids[]", 12345 %> 
    <%=check_box_tag "friendids[]", 67890 %>
    <%= submit_tag "send requests"%>
<% end_form_tag %>

在我的 game_pages_controller 中,我现在有一个用于 sendrequest 的空函数。

def sendrequest
end

我的路线只是将游戏页面路由到主页。

root to: 'game_pages#home'
match '/home', to: 'game_pages#home'

复选框的目的是获取用户想要选择的好友列表。但是我不需要将它添加到数据库中,这就是为什么我没有任何朋友的模型。我想使用一些javascript,以便提交表单将遍历friendsids并使用它们执行一些功能。出于这个原因,我不需要保留朋友模型,并且复选框实际上不会为当前用户更新任何模型。

我在这里想念什么?

4

2 回答 2

0

如果要在视图中使用控制器中的方法,则必须告诉视图上下文将其包含helper_method在控制器中。

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_tag,而是使用普通的 ruby​​ do/end 块语法。该块中的任何内容都将包含在表单标签中。

于 2013-02-24T05:12:54.707 回答
0

如果您希望表单执行sendrequest操作,您需要设置您的路线并在表单中使用它。

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

# view
<%= form_tag sendrequest_path do %>

这就是它应该设置的方式。您将视图中的 url 与控制器中的操作相匹配。

于 2013-02-24T05:23:01.577 回答