【问题标题】:a difference between an .erb and .haml in the form data表单数据中 .erb 和 .haml 之间的区别
【发布时间】:2011-07-18 12:30:59
【问题描述】:

我有一个 .erb 脚本,它可以工作:

<% form_for :ticket do |f| %>
<% if @ticket.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@ticket.errors.count, "error") %> prohibited this post from being  saved:</h2>
<ul>
<% @ticket.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p><b>department</b><br/>
<%= select("ticket", "department_id", Department.find(:all).collect{ |d| [ d.name, d.id] }) %>
</p>
<label for="ticket_subject">subject</label> <%= text_field "ticket", "subject" -%><br/>
<label for="ticket_request">request</label> <%= text_area "ticket", "message" -%>

<br/><br/><br/>
<%= submit_tag 'make a request' -%>
<% end %>

但是当它转换成haml时:

- form_for :ticket do |f|
  - if @ticket.errors.any?
    #error_explanation
      %h2
        = pluralize(@ticket.errors.count, "error")
        prohibited this post from being saved:
      %ul
        - @ticket.errors.full_messages.each do |msg|
          %li= msg
  %label{:for => "ticket_name"} name
  = text_field "ticket", "name"
  %br/
  %label{:for => "ticket_email"} email
  = text_field "ticket", "email"
  %br/
  %p
    %b department
    %br/
    = select("ticket", "department_id", Department.find(:all).collect{ |d| [ d.name, d.id] })
  %label{:for => "ticket_subject"} subject
  = text_field "ticket", "subject"
  %br/
  %label{:for => "ticket_request"} request
  = text_area "ticket", "message"
  %br/
  %br/
  %br/
  = submit_tag 'make a request'

我有这样一个错误:

You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.errors

在这一行:

- if @ticket.errors.any?

谢谢

【问题讨论】:

    标签: ruby-on-rails-3 forms haml


    【解决方案1】:

    请尝试

    - form_for @ticket do |f|
    

    【讨论】:

      【解决方案2】:

      这不是haml的错,@ticket 尚未定义。您应该在控制器中定义它。

      【讨论】:

      • 是的!我做错了什么...但是控制器中存在@ticket @ticket = Ticket.new(params[:ticket])
      • 我的问题是我在“if request.post?”行之后设置了“@ticket = Ticket.new(params[:ticket])”行:)
      猜你喜欢
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 2016-12-05
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 2014-07-11
      相关资源
      最近更新 更多