用括号渲染局部视图

时间:2014-10-08 08:36:05

标签: ruby-on-rails ruby

我刚开始使用rails。 我正试图在我的控制器的方法中渲染局部视图,但我用括号开始。

我的appplication_controller.rb

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  def inline_error(field, messages_bag)
    if msg = messages_bag.errors.full_messages_for(field).first
      msg = '<small class="error">'+msg+'</small>'
      return msg.html_safe
    end
  end
  helper_method :inline_error

  #nevermind on param
  def take_flash(type)
    render "class/flash", :layout => false
  end
  helper_method :take_flash
end

我的班级/ _flash.html.rb文件:

hello

我开始了

["hello"]

有人能帮助我吗?

2 个答案:

答案 0 :(得分:1)

实际上有两种不同的render方法,一种是在ActionView上定义的,另一种是在ActionController上定义的 - 它们的作用略有不同。您需要的是render视图:

def take_flash(type)
  view_context.render "class/flash"
end

答案 1 :(得分:1)

我认为你混淆了助手和局部的使用。它们都用于生成视图代码段,但您不需要同时使用它们。 在您的情况下,您可以直接将您的参数传递给部分,并删除帮助程序。

您的观点:

<%= render 'flash', locals: {my_param: 'blahblah'} %>

你的_flash部分:

Hello <%= blahblah %>

或者您可以将其传递给帮助程序并删除部分。

您的观点:

<%= take_flash('blahblah') %>

你的助手方法(在助手文件中定义,而不是你的控制器):

def take_flash(my_param)
  "Hello #{blahblah}"
end

两种方法都有相同的结果。