我正在尝试将我的帖子模型放在另一个控制器中。以下是概念和资源:
home/about...
等方法,使网址看起来像www.xxxx.com/index/home
。 当我运行以下代码时,
在views/index/home.html.erb
:
<%= render "posts/post" %>
在views/posts/_post.html.erb
:
<li id="post-<%= post.id %>">
<span class="user"><%= link_to post.user.name, post.user %></span>
<span class="content"><%= post.content %></span>
</li>
在models/post.rb
:
class Post < ActiveRecord::Base
belongs_to :user
validates :content, presence: true
end
在controllers/posts_controller.rb
:
class PostsController < ApplicationController
def show
@user = User.find(params[:id])
@posts = @user.posts
end
end
显示错误:
NameError` in `Index#home
Showing /home/ubuntu/workspace/app/views/posts/_post.html.erb where line #1 raised:
undefined local variable or method `post' for #<#<Class:0x007f105a04f7d8>:0x007f1058676d48>
Extracted source (around line #1):
1<li id="post-<%= post.id %>">
@post
或@posts
似乎不是问题的根源,因为我已多次尝试过。
答案 0 :(得分:0)
您的错误意味着此时没有名为post
的变量。确实可以在视图中设置变量,但如果您希望从控制器获取某些内容,那么您就不幸了。在rails中,您通常会设置实例变量(如@post
或@posts
)以与视图进行通信。对我而言,您似乎错过了render
电话周围的循环。另外 - 你没有将实际的post
传入部分。在home.html.erb
中你可能需要像
<% @posts.each do |post| %>
<%= render post %>
<% end %>
实际上将任何帖子发送到您的部分。