Rails辅助函数似乎不起作用

时间:2012-06-15 14:05:37

标签: ruby-on-rails helper-functions

免责声明:我是轨道n00b。我正在玩一个简单的辅助函数,它没有做我想做的事。

  • 我有一个名为'webform'的模型,其中包含一些文本字段(名称,地址等)
  • 我正在尝试使用辅助函数来测试if语句(即'是:address =='10')
  • 这是辅助函数

    def webforms_helper
      if :address == 10
        print "Address is 10"
      else
        print "Address is not 10"
      end   
    end
    
  • 在我的“展示”视图中,我已合并辅助函数<%= webforms_helper %>

  • 我加载了网页应用,没有出现任何错误 - 但是,它没有打印出“地址为10”或“地址不是10”
  • 我也没有成功使用put(并检查控制台)而不是print

  • 有什么想法吗?我为新手问题道歉;)

3 个答案:

答案 0 :(得分:2)

首先,一个合适的助手看起来像这样:

module ApplicationHelper
  def myformchecker(ahash)
     if ahash[:address] == '10'
        return 'Address is 10'
     end
  end
end

然后在你的控制器中:

class ApplicationController < ActionController::Base
  helper: application
  ...
end

然后在你看来:

<%= myformchecker(params) %>

因此,如果视图是为响应表单提交而呈现的,则表单具有以下内容:

<%= text_field_tag :address %>

当用户填写表单并将字符串“10”作为地址时,您的视图中将生成“地址为10”。

答案 1 :(得分:1)

嗯,你的运动不是很清楚,但是这样......

def webforms_helper 
  if :address == 10 
    print "Address is 10" 
  else 
    print "Address is not 10" 
  end
end
由于以下原因,

永远不会打印任何内容到Rails视图,你正在使用put和print方法,这两个将输出到控制台。你必须自己返回字符串,这样做......

def webforms_helper 
  if :address == 10 
    "Address is 10" 
  else 
    "Address is not 10" 
  end
end

我知道你正在做一个简单的演示,但是将参数传递给Helper是个好主意。这就是你99%的时间都会做的事情..

def webforms_helper(address)
  if address == 10 
    #return something meaningful as string to the view
  else 
    #return something meaningful as string to the view too.
  end
end

答案 2 :(得分:0)

您应该将信息传递给帮助者,以便他们为您做出决定。

# app/views/webforms/show.html.erb
<%= webforms_helper(address) %>

# app/helpers/webform_helper.rb
module WebformHelper
  def webforms_helper(address)
    if address == 10
      "Address is 10"
    else
      "Address is not 10"
    end
  end
end

如果您刚刚开始使用Rails,我还衷心建议您找一本好书(Agile Web Development with Rails)或教程(Ruby on Rails Tutorial)。