【问题标题】:Rails partials: What am I doing wrong?Rails partials:我做错了什么?
【发布时间】:2012-06-13 01:59:49
【问题描述】:

所以,我在“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>

我对这段代码有两种看法:

“app/views/posts/new.html.erb”

<h1>Nuevo post</h1>

    <%= render 'form' %>

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

“app/views/posts/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

与编辑视图相同。

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

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案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 %>
    

    【讨论】:

    • 对不起,我的错误。只是在submit 行中忘记了?,请参阅上面的更新代码。
    • 很奇怪。提交后尝试删除逗号。
    • 万岁!有用!现在,我看到你刚刚更改了这一行: 在所有代码中,你能解释一下为什么它会起作用吗?你到底做了什么? (理论部分)
    • 我已经接受了你的回答,你能解释一下为什么会这样吗?
    • 首先,@post 将检查它是否来自哪里,如果它来自new 操作,他们知道这是一条新记录,如果是,将显示Nuevo Post,否则显示Actualizar Post,所有这些都在一行中使用三元运算符。
    【解决方案2】:

    您不能在部分之外使用表单变量。在您的新页面和编辑页面中,您都可以重用 f 变量,即使它只存在于部分中。

    我建议您通过在部分中移动提交按钮的创建来修复错误。不要忘记将 &lt;%- end %&gt; 也移动到部分内,因为您正在完成部分内的表单。

    【讨论】:

    • 但在我的编辑视图中,按钮说了其他内容...我怎样才能保持这种行为?
    • 您可以将变量传递给部分。有关示例,请参阅stackoverflow.com/a/3222958/136584。基本上你正在设置 :locals 哈希。
    • 你能给我一个具体的例子吗?我尝试了您链接到的问题中的示例,但没有奏效...
    【解决方案3】:

    您缺少一个 来关闭您的 块。

    【讨论】:

      猜你喜欢
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 2021-04-19
      • 2017-03-13
      • 2017-01-18
      • 2013-06-24
      相关资源
      最近更新 更多