Ruby on rails 讨论中的名称错误#索引

Ruby on rails 讨论中的名称错误#索引,ruby-on-rails,ruby,nomethoderror,Ruby On Rails,Ruby,Nomethoderror,我正在尝试编写一个ruby应用程序,让你在帖子上发表讨论和评论。问题是,我无法得到评论-这里称为微博客,显示在讨论下面。现在,我在讨论中得到了错误名称error#index:未定义的局部变量或#的方法'discussion'。有什么想法吗 微观形态 <% @micropost = Micropost.new %> <%= form_for(@micropost) do |f| %> <%= render 'shared/error_messages', o

我正在尝试编写一个ruby应用程序,让你在帖子上发表讨论和评论。问题是,我无法得到评论-这里称为微博客,显示在讨论下面。现在,我在讨论中得到了错误名称error#index:未定义的局部变量或#的方法'discussion'。有什么想法吗

微观形态

<% @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
class MicropostsController
讨论控制器

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 %>

  • 五年前发的。
  • {:discussion=>discussion}%>
    谢谢你的帮助,我相信这很简单。在这段代码中,我对此相当陌生

    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。讨论
    是您的问题。应该是
    @user.discussions
    。同样,在下一行中,
    @user.microposts

    我想您显示了对
    show
    方法的讨论。但是,在show方法和控制器中除
    create
    之外的所有其他地方,您都声明了
    @discussions

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

    所以,要在视图中定义变量,您应该在相对控制器方法中有
    @discussion
    ,局部变量也应该传递
    @discussion

    :locals => {:discussion => @discussion }
    

    视图中使用的讨论变量定义在哪里?您可以在视图中使用控制器操作中的实例变量。您可能想使用@Discussions,我想它还没有被正确定义。定义它的正确代码是什么?讨论=讨论.查找(参数[:id])?我应该把它放在哪里?你可以把它作为
    @discussion=discussion.find(params[:id])
    放在你的控制器操作中,并在你的视图中使用@discussion在讨论控制器中显示def的问题我已经有@discussions=@user.discussion.paginate(page:params[:page])。谢谢你的帮助!对不起,就像我说的,我对这个还是很陌生的。我应该把那行代码放在哪里?你把micropost部分放在哪里。但据我所知,还有其他问题。我把它放在:locals=>{:discussion=>@discussion}%>中,但仍然有问题。还有,还有什么问题?@user2472006,如果您已经阅读了我的所有答案,我很遗憾您需要在controller方法中声明
    @discussion
    。对不起,我不太确定该声明为什么