0

我正在尝试编写一个 ruby​​ 应用程序,让您发布讨论和评论帖子。问题是我无法获得评论——这里称为微博,显示在讨论下方。现在,我在 Discussions#index 中收到错误 NameError:#<#:0x0000010563a1e0> 的未定义局部变量或方法“讨论”。有任何想法吗?

微博形式

<% @micropost = Micropost.new %>

<%= form_for(@micropost) do |f| %>
    <%= render 'shared/error_messages', object: f.object %>
    <div class="field">
      <%= f.text_area :content, placeholder: "Compose new micropost..." %>
    </div>
    <%= f.hidden_field :discussion_id, discussion.id%>

    <%= f.submit "Post", class: "btn btn-large btn-primary" %>
<% end %>

微柱控制器

class MicropostsController < ApplicationController
  before_filter :signed_in_user, only: [:create, :destroy]

  def index
  end

  def create
    @discussion = current_user.discussions.new
    @micropost = current_user.microposts.build(params[:micropost])
     if @micropost.save
       flash[:success] = "Posted!"
       redirect_to root_url
     else
       render 'static_pages/home'
     end
  end

  def destroy
  end
end

讨论控制器

class DiscussionsController < ApplicationController
  before_filter :signed_in_user, only: [:index, :edit, :update]


  def show
    @user = User.find(params[:id])
    @discussions = @user.discussion.paginate(page: params[:page])
    @microposts = @user.micropost.paginate(page: params[:page])
  end

  def index
    @discussions = Discussion.all
  end

  def create
    @discussion = current_user.discussions.build(params[:discussion])
    if @discussion.save
      flash[:success] = "Discussion Started!"
      redirect_to root_url
    else
      render 'static_pages/home'
    end
  end

  def destroy
  end

  def edit
  end

  def update
  end

  def new
  end
end

讨论视图

<% content_for :script do %>
    <%= javascript_include_tag 'hover_content' %>
<% end %>

<li>
  <div class = "intro-bar"><span class = "intro"><%=discussion.intro %></span></div>
  <div class = "content-bar">
    <span class = "content"><%= discussion.content %></span>
    <div class = "buttons">
      <div class = "vote-neg"><%= link_to "Break Up", signup_path,class: "btn btn-large btn-breakup" %></div>
      <div class = "vote-plus"><%= link_to "Stay Together", signup_path,class: "btn btn-large btn-staytogether" %></div>
    </div>
  </div>
</li>

<span class = "timestamp">
    Posted <%= time_ago_in_words(discussion.created_at) %> ago.
  </span>

<div class = "comments">
  <% discussion.microposts.each do |micropost| %>
      <li>
        <div class = "post-comment"><%= micropost.content%></div>
      </li>
  <% end %>
</div>

<% if signed_in? %>
    <div class = "row">
      <aside class = "span4">
        <section>
          <%= render 'shared/micropost_form', :locals => {:discussion => discussion }%>
        </section>
      </aside>
    </div>
<% end %>

感谢您的帮助,我确定它非常简单。我对此很陌生

4

2 回答 2

0

在这段代码中,

class DiscussionsController < ApplicationController
  before_filter :signed_in_user, only: [:index, :edit, :update]


  def show
    @user = User.find(params[:id])
    @discussions = @user.discussion.paginate(page: params[:page])
    @microposts = @user.micropost.paginate(page: params[:page])
  end

看起来@user.discussion是你的问题。应该是@user.discussions。同样与下一行,@user.microposts

于 2013-06-21T15:32:59.270 回答
0

我想你用show方法来讨论。但是,在 show 方法和控制器中的其他任何地方,除了create你声明@discussions.

我实际上不明白,为什么在 show 方法中你做的事情更适合索引方法,但无论如何,Rails 将变量从控制器传递到视图,如果它被声明为实例(使用@)。

所以,要在视图中定义变量,你应该有@discussion相关的控制器方法,并且本地也应该通过@discussion

:locals => {:discussion => @discussion }
于 2013-06-21T15:33:16.180 回答