在rails中使用form_tag undefined方法

时间:2013-02-24 05:02:04

标签: ruby-on-rails

我在使用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并使用它们执行一些功能。出于这个原因,我不需要保持朋友模型,并且复选框实际上不会更新当前用户的任何模型。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

如果您要在视图中使用控制器中的方法,则必须告诉视图上下文,以便在Controller中使用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 %>

基本上,form标签需要包含在输出erb而不是常规erb中,否则它不会将你的代码输出到缓冲区。并且没有end_form_tag,而是使用正常的ruby do / end块语法。该块中的任何内容都将包含在表单标记中。

答案 1 :(得分:0)

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

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

# view
<%= form_tag sendrequest_path do %>

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