如何在html中使用if语句作为ruby注入?

时间:2015-12-18 19:30:03

标签: html ruby-on-rails ruby code-injection

所以我开始尝试做的是在我的html代码中执行if语句,其中@events在我的控制器中定义:

<% @events.each do |event| %>
       <% if event.starts_at.hour() == 9 %>
       <p> <%= event.name %>
       <% end %>
<% end %>

但显然现在尝试加载后,程序不喜欢这个。 (我对ruby很新,所以我至少要尝试这些东西!)

尝试此操作时给出的错误是:

C:/Users/Sarah/RubymineProjects/MyApp/app/views/calendars/_show.html.erb:49:语法错误,意外')',期待keyword_then或';'还是'\ n'......? &安培;&安培; event.starts_at.hour == 9); @ output_buffer.safe_append ='... ^ C:/Users/Sarah/RubymineProjects/MyApp/app/views/calendars/_show.html.erb:52:语法错误,意外的keyword_end ,期待')''。freeze;结束^ C:/Users/Sarah/RubymineProjects/MyApp/app/views/calendars/_show.html.erb:54:语法错误,意外的keyword_end,期待')''。freeze;结束^ C:/Users/Sarah/RubymineProjects/MyApp/app/views/calendars/_show.html.erb:364:语法错误,意外的keyword_ensure,期待')'C:/ Users / Sarah / RubymineProjects / MyApp / app / views / calendars / _show.html.erb:366:语法错误,意外的keyword_end,期待')'

为什么会这样?是因为我的_show.html.erb在我的main.html.erb中被部分使用了吗? 我该怎么做呢?

以下是我使用Pages控制器进行的尝试。 html文件名为_show.html.erb,它属于另一个控制器,但它被渲染到属于Pages控制器的main.html.erb文件中。

class PagesController < ApplicationController

  #before_action :require_customer, only: [:main]

  def home

  end


  def main
    @events = current_customer.calendar.events

    def mon900(event)
      if(event.day()==1 && event.hour()==9)
        @mon900 = event
      end
    end
  end
end

我在html中调用了这个方法:

<% if @mon900 %>
    <p>do something</p>
<% end %>

我是否在正确的轨道上?我只学了一个星期的Ruby,所以显然不熟悉框架和语法。 谢谢!

1 个答案:

答案 0 :(得分:1)

我只想将其重写为:

<% @events.each do |event| %>
  <% if event.starts_at.monday? && event.starts_at.hour == 9 %>
    <p><%= event.name %></p>
  <% end %>
<% end %>

那就是说,我不认为这是最漂亮的代码吗?如果在星期一上午9点​​开始的事件对你很重要,你想为它创建一个范围,所以你可以这样称它为:@events.monday_at_9.each do |event|而没有循环内的if条件(更多关于{{3}中的范围})