簡體   English   中英

Rails:一種視圖,模型及其相關模型

[英]Rails: one view, model and it's associated model

因此,例如,以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 %>

考慮到將注釋創建表單放置在帖子/顯示視圖中,如何實現相關注釋模型的錯誤消息呈現?

表單代碼通常以_form.html.erb部分的形式保存在匹配模型的文件夾中,該部分在new.html.erbedit.html.erb中都呈現(要查看一個很好的示例,請為示例模型生成支架 )。

在您的情況下,您可以做的是將此評論表單部分呈現在post show動作中。

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

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM