Rails:一个视图,模型和它的关联模型

时间:2013-10-30 19:46:55

标签: ruby-on-rails associations

所以,例如,来自http://guides.rubyonrails.org/getting_started.html的案例如您所见,如果您尝试创建无效帖子,您将看到错误消息:

    <%= form_for @post do |f| %>
        <% if @post.errors.any? %>
      <div id="errorExplanation">
        <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
        <ul>
        <% @post.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
        <% end %>
        </ul>
      </div>
      <% end %>
      <p>
        <%= f.label :title %><br>
        <%= f.text_field :title %>
      </p>

      <p>
        <%= f.label :text %><br>
        <%= f.text_area :text %>
      </p>

      <p>
        <%= f.submit %>
      </p>
    <% end %>

如何为关联的Comment模型实现错误消息呈现,请记住注释创建表单是否放在posts / show视图中?

1 个答案:

答案 0 :(得分:0)

表单代码通常保存在_form.html.erb部分的匹配模型的文件夹中,该部分在new.html.erbedit.html.erb中呈现(要查看一个很好的示例,请生成支架用于样本模型)。

在您的案例中您可以做的是在帖子显示操作中将此评论表单部分呈现。

app/views/posts/show.html.erb
  <%= render 'comments/form', comment: @comment || @post.comments.build # Whatever you have here %>

app/views/comments/_form.html.erb
  <%= form_for comment do |f| %>
    <%= render 'error_messages', target: comment %>
    ...
  <% end %>

此外,显示错误消息通常在所有表单中都是相同的,因此为了删除重复,您可以将此代码提取为单独的部分。

app/views/application/error_messages.html.slim # here is slim syntax, convert as nescessary
/ error explanation
/
/ = render 'shared/error_explanation', target: @school
/
- if target.errors.any?
  .error-messages
    h4 Please correct the following fields:
    ul
      - target.errors.full_messages.each do |message|
        li = message

希望这有帮助。