2011-07-18 97 views
1

我有一個.erb腳本的.erb和.haml,其工作方式之間的差:形式數據

<% 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? 

感謝

回答

-1

這不是HAML的錯,@ticket尚未確定。你應該在你的控制器中定義它。

+0

我不相信它。 – gunn

+0

是的!我做錯了什麼...但是@ticket存在於控制器中 @ticket = Ticket.new(params [:ticket]) – Vadim

+0

我的問題是我設置了「@ticket = Ticket.new(params [:ticket])」之後「如果request.post?」 :) – Vadim

1

請嘗試

- form_for @ticket do |f|