Ruby on rails 讨论中的名称错误#索引
我正在尝试编写一个ruby应用程序,让你在帖子上发表讨论和评论。问题是,我无法得到评论-这里称为微博客,显示在讨论下面。现在,我在讨论中得到了错误名称error#index:未定义的局部变量或#的方法'discussion'。有什么想法吗 微观形态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
<% @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
。对不起,我不太确定该声明为什么