部分语法错误

时间:2014-02-25 16:25:37

标签: ruby-on-rails

我在以下查看代码中收到syntax error, unexpected =>, expecting '}'

<%= render :partial => 'form', :locals => { :message => @message, :user => @user} %>

我正在从new.html页面渲染部分内容。部分看起来对我的眼睛,但也许我错过了什么?

_form.html.erb:

<%= form_for message, :url => user_messages_path(user), :html => {:class => "MainForm"} do |f| %>

  <%if message.reply_to%>
    <%=f.hidden_field :to%>
    <%=f.hidden_field :parent_id%>
  <%else%>
    <%label{:for => 'message_to'} %>
      <%=:to.l%>
      <%em= "(" + :type_a_username.l + ")"%>
    <%= text_field_tag 'message[to]', @message.to, {:autocomplete => "off", :size => 35, :id => "message_to"}%>
    <% auto_complete%>#message_to_auto_complete
    <%content_for :end_javascript do%>
      <%= auto_complete_field 'message_to', {:url => auto_complete_for_username_user_messages_path(@user), :tokens=>','}%>

  <%if @reply  %>
    <%= f.hidden_field :subject  %>
  <%else%>
    <%label{:for => 'message_subject'}= :subject.l + ":"%>
    <%= f.text_field :subject%>

  <%label{:for => "message_body"}= :message.l + ":"%>
  <%= f.text_area :body%>

  <%p%>
    <%= submit_tag :send.l%>

2 个答案:

答案 0 :(得分:2)

label标记不包含哈希值。来自the docs

<% f.label :message_to %>

您的代码中的以下行看起来特别可疑,它肯定会引发错误。你到底想要做什么呢?

<%label{:for => 'message_subject'}= :subject.l + ":"%> # THIS WON'T WORK

如果您想要标签的自定义文字,可以通过以下方式完成:

<%= f.label :message_subject, "#{subject.l} :" %>

哪个输出以下标记:

<label for="message_subject">THE MESSAGE SUBJECT</label>

答案 1 :(得分:1)

此语法(在整个视图中的类似位置):

<%label{:for => 'message_subject'}= :subject.l + ":"%>

无效。

(通常)正确的标签元素是:

<%= f.label :subject %>

请记住以下几点:

  • 符号(这是:subject是什么),是一种特殊的对象,最终代表一个不可变的字符串;它没有您期望的.l方法
  • 假设:subjectmessage的字段,请确保您使用的是表单构建器对象(在本例中为f变量),因此表单元素已正确绑定到{ {1}}对象
  • 使用ERB标记中的message语法将表单元素回显到页面。如果您希望代码呈现(或=要压缩),它应该总是看起来像<%= ... %>