0

ユーザーが投稿を作成し、他のユーザーがそのトピックに関する投稿を送信できるプロジェクトに取り組んでいます。私のリソース ファイルは次のとおりです。

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

    resources :topics , only: [ :show, :create, :destroy] do
    resources :posts, only: [:create, :new]

私のtopics_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 %>

私の作成アクションは次のとおりです。

    def create
    @topic = current_user.topics.build(params[:topic])  
    if @topic.save
        flash[:success] = "Konu oluşturuldu!"
        redirect_to root_path
    else
        render 'static_pages/home'
    end
end

私の posts_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 %>

私の post_controller 作成アクションは次のとおりです。

def create
    @topic= Topic.find(params[:topic_id])
    @post = @topic.posts.build(params[:post])
    @post.user = current_user
    @post.topic_id = @topic.id

    if @post.save
        flash[:success] = "Yorum oluşturuldu!"
        redirect_to topic_path(@topic)
    else
        render 'static_pages/home'
    end
end

これは私の error_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 %>

空の投稿と空のトピックをテストすると。このエラーが発生します:

undefined method `each' for nil:NilClass

Extracted source (around line #2):

1: 
2: <% @topics.each do |topic|%>  
3:   <li><%=link_to topic.title, topic_path(topic) %></li>  
4: 
5:  <%= will_paginate @topics %>

私の static_pages_controller.rb :

  def home
        if signed_in?
        @topic = current_user.topics.build if signed_in?
        end
        @topics = Topic.paginate :page => params[:page], :per_page => 20
  end

そして私のhome.html.erb:

<% if signed_in? %>
  <div class="row">
        <%= render 'shared/user_info' %>
        <%= render 'shared/topic_form' %>       
    <ol class="topics-signedin">
    <%= render 'shared/topics' %>
   </ol>

エラーが表示されないのはなぜですか?

4

2 に答える 2

1

「作成」アクションに @topics がありません。はい、フォームをレンダリングした「ホーム」に設定されますが、送信時に「作成」に渡され、変数を再度ロードする必要があります。あなたの場合、 @topics は設定されていません「static_pages/home」をレンダリングします。あなたが必要..

...
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
于 2012-06-29T12:38:24.497 に答える
0

を設定することはありませ@topics@topic。ゼロ@topicsも同様です。

static_pages/homeエラーが発生した場合は、それらを必要とするをレンダリングします。代わりにneworを再レンダリングする必要があります。edit

于 2012-06-29T12:15:52.410 に答える