Rails partials:我做错了什么?

时间:2012-06-13 01:59:50

标签: ruby-on-rails ruby

所以,我在“app / views / posts”中将此代码部署在名为“_ form.html.erb”的部分中:

<%= form_for @post do |f| %>
    <% if @post.errors.any? %>
        <h2>Errores:</h2>   
        <ul>
            <% @post.errors.full_messages.each do |message| %>
                <li><%= message %></li>
            <% end %>
        </ul>
    <% end %>
<p>
    <%= f.label :title %><br />
    <%= f.text_field :title %><br />
<br />
    <%= f.label :content %><br />
    <%= f.text_area :content %>
</p>

我对此代码有两个观点:

“应用/视图/帖/ new.html.erb”

<h1>Nuevo post</h1>

    <%= render 'form' %>

<p>
    <%= f.submit "Agregar Nuevo Post" %>
</p>
<% end %>

“应用/视图/帖/ edit.html.erb”

<h1>Editar Post</h1>

    <%= render 'form' %>

<p>
    <%= f.submit "Actualizar Post" %>
</p>
<% end %>

我想要的是在视图中呈现的表单,但是我已向您展示的代码我在服务器中收到此错误输出:

SyntaxError in Posts#new

Showing /home/levick/rubyblog/app/views/posts/new.html.erb where line #10 raised:

/home/levick/rubyblog/app/views/posts/new.html.erb:10: syntax error, unexpected keyword_ensure, expecting $end
Extracted source (around line #10):

7: </p>
8: <% end %>
Trace of template inclusion: app/views/posts/new.html.erb

Rails.root: /home/levick/rubyblog

Application Trace | Framework Trace | Full Trace
Request

Parameters:

None
Show session dump

Show env dump

Response

Headers:

None

与编辑视图相同。

我的问题是:我做错了什么?

谢谢!

3 个答案:

答案 0 :(得分:1)

您不能在partial之外使用表单变量。在新页面和编辑页面中,您重复使用f变量,即使它仅存在于部分内部。

我建议您通过在部分内部移动创建提交按钮来修复错误。不要忘记也将部分内的<%- end %>移动到部分内部。

答案 1 :(得分:1)

在部分_form.html.erb

中尝试以下操作
<%= form_for @post do |f| %>
    <% if @post.errors.any? %>
        <h2>Errores:</h2>   
        <ul>
            <% @post.errors.full_messages.each do |message| %>
                <li><%= message %></li>
            <% end %>
        </ul>
    <% end %>
<p>
  <%= f.label :title %><br />
  <%= f.text_field :title %><br />
<br />
  <%= f.label :content %><br />
  <%= f.text_area :content %>
</p>
<%= f.submit @post.new_record? ? 'Nuevo Post' : 'Actualizar Post' %>
<% end %>

答案 2 :(得分:0)

你错过了&lt;%end%&gt;关闭你的&lt;%= form_for%&gt;块。