Ruby on rails _错误消息不适用于窗体

Ruby on rails _错误消息不适用于窗体,ruby-on-rails,forms,Ruby On Rails,Forms,我正在进行一个项目,用户可以创建帖子,其他人可以发送关于该主题的帖子。我的资源文件是: resources :users resources :sessions, only: [:new, :create, :destroy] resources :topics , only: [ :show, :create, :destroy] do resources :posts, only: [:create, :new] 我的主题\u form.html.erb: <

我正在进行一个项目,用户可以创建帖子,其他人可以发送关于该主题的帖子。我的资源文件是:

resources :users
    resources :sessions, only: [:new, :create, :destroy]

    resources :topics , only: [ :show, :create, :destroy] do
    resources :posts, only: [:create, :new]
我的主题\u form.html.erb:

<%= form_for(@topic) do |f| %>
  <%= render 'shared/error_messages', object: f.object %>
  <div class="field">
        <%= f.text_area :title, placeholder: "yeni başlık girin..." %>
  </div>
  <%= f.submit "Gönder", class: "btn btn-large btn-primary" %>
<% end %>
我的帖子_form.html.erb是:

<%= form_for [@topic, @post] do |f| %>
  <%= render 'shared/error_messages', object: f.object %>
  <div class="field">
    <%= f.text_area :content, placeholder: "yorumunuzu girin..." %>
  </div>
  <%= f.submit "Gönder", class: "btn btn-large btn-primary" %>
<% end %>
这是我的错误消息。\u messages.html.erb:

<% if object.errors.any? %>
  <div id="error_explanation">
    <div class="alert alert-error">
      The form contains <%= pluralize(object.errors.count, "error") %>.
    </div>
    <ul>
    <% object.errors.full_messages.each do |msg| %>
      <li>* <%= msg %></li>
    <% end %>
    </ul>
  </div>
<% end %>
<% if signed_in? %>
  <div class="row">
        <%= render 'shared/user_info' %>
        <%= render 'shared/topic_form' %>       
    <ol class="topics-signedin">
    <%= render 'shared/topics' %>
   </ol>
和my home.html.erb:

<% if object.errors.any? %>
  <div id="error_explanation">
    <div class="alert alert-error">
      The form contains <%= pluralize(object.errors.count, "error") %>.
    </div>
    <ul>
    <% object.errors.full_messages.each do |msg| %>
      <li>* <%= msg %></li>
    <% end %>
    </ul>
  </div>
<% end %>
<% if signed_in? %>
  <div class="row">
        <%= render 'shared/user_info' %>
        <%= render 'shared/topic_form' %>       
    <ol class="topics-signedin">
    <%= render 'shared/topics' %>
   </ol>


为什么不显示错误?

您从未设置
@topics
,仅设置
@topic
。所以
@topics
为零


如果出现错误,您将呈现需要这些内容的
静态页面/home
。您应该重新呈现
新的
编辑

您在“创建”操作中缺少@topics。是的,它在呈现表单的“home”中设置,但在提交时,它传递给“create”,然后“create”必须再次加载变量,在您的情况下,在呈现“static_pages/home”时没有设置@topics。你需要

...
if @post.save
  flash[:success] = "Yorum oluşturuldu!"
  redirect_to topic_path(@topic)
else
  @topics = Topic.paginate :page => params[:page], :per_page => 20
  render 'static_pages/home'
end

我已经显示了static_pages.controller。它不是从那个控制器获取@topics吗?我使用了我的topics控制器中的行。我现在可以显示topics错误了。但是我不能显示错误。我正在试图找到一种@postsIt的方法,它的逻辑应该是相同的?是的,我确实使用了这一行,但它没有显示:@posts=@topic.posts.paginate(page:params[:page])重定向到topic路径(@topic)你在@posts上有错误吗?你的主题模型有“has_许多:posts”吗?
<% if signed_in? %>
  <div class="row">
        <%= render 'shared/user_info' %>
        <%= render 'shared/topic_form' %>       
    <ol class="topics-signedin">
    <%= render 'shared/topics' %>
   </ol>
...
if @post.save
  flash[:success] = "Yorum oluşturuldu!"
  redirect_to topic_path(@topic)
else
  @topics = Topic.paginate :page => params[:page], :per_page => 20
  render 'static_pages/home'
end