Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 如何在另一个视图中渲染视图(rails 4)_Ruby On Rails 4_Views_Controllers_Partials - Fatal编程技术网

Ruby on rails 4 如何在另一个视图中渲染视图(rails 4)

Ruby on rails 4 如何在另一个视图中渲染视图(rails 4),ruby-on-rails-4,views,controllers,partials,Ruby On Rails 4,Views,Controllers,Partials,嗨,我想先说一下,我对编码还不熟悉 我有一个问题,我相信可以通过两种方式解决 A.通过提供部分 B.通过更新控制器 (我可能完全错了,但这些都是我怀疑的lol) 我有两个控制器/视图“评论”和“日志”。我希望它们都出现在同一页上 我该怎么做? 我试图渲染一个部分,但我总是得到一个错误 我试过下面的代码: 这使得我的评论出现在页面上,但是当我添加 @log = @user.logs.all 对它来说,它不像评论那样将所有日志都拉到页面上 def show @user = User.find

嗨,我想先说一下,我对编码还不熟悉

我有一个问题,我相信可以通过两种方式解决

A.通过提供部分

B.通过更新控制器

(我可能完全错了,但这些都是我怀疑的lol)

我有两个控制器/视图“评论”和“日志”。我希望它们都出现在同一页上

我该怎么做? 我试图渲染一个部分,但我总是得到一个错误

我试过下面的代码:

这使得我的评论出现在页面上,但是当我添加

@log = @user.logs.all 
对它来说,它不像评论那样将所有日志都拉到页面上

def show
  @user = User.find_by_name(params[:id])
  if @user 
    @reviews = @user.reviews.all
    render action: :show
  else
    render file: 'public/404', status: 404, formats: [html]
  end
end

第一件事。视图是指控制器中的操作。因此,每个控制器可以有多个视图,甚至没有视图

因此,如果您想在同一页面上呈现
@reviews
@logs
,您应该首先在同一操作中实例化这两个实例变量,然后在同一操作中呈现这两个部分。 你是怎么做到的?容易的。 首先,您进入刚刚显示的控制器,并编辑
show
操作

def show       
  # You can set the variable in the if-clause 
  # And you also need to use static finders with a hash as an argument in Rails4
  if (@user = User.find_by(name: params[:id]))
     @reviews = @user.reviews.all 
     @logs = @user.logs.all
  # You don't need to call render explicitly 
  # if you render the view with the same name as the action 
   else
     render file: 'public/404', status: 404, formats: [html]
   end     
end
第二:你去你的
/app/views/reviews/show.html.erb
模板,像这样把两个部分放在那里(这只是一个例子,调整你的标记以适应你的需要)


以下是在HAML中将部分渲染到视图中的方法:

=render :partial => "header"
%h2 Hello World
=render :partial => "footer"
以这种方式渲染的每个部分都必须在同一文件夹中创建。 每个分部的名称必须以下划线(389;)开头。这应该是视图的目录:

- home
    - index.html.haml
    - _header.html.haml
    - _footer.html.haml

欢迎来到Stack Overflow,Alicia。你的问题看起来很有趣,但你的格式不是很清楚,让人有点困惑。如果你能编辑你的问题并澄清这一点,你会有更好的机会得到一个好的答案。我正试图在主页上做同样的事情,那就是评论索引(你帮助的前一个索引成功地在个人资料页面上获得了评论和日志)。你建议的方法不适用于索引审查页面,我想在索引页面上,您需要执行
@reviews=Review.all
@logs=Log.all
,因为您的参数中没有用户名。当我在评论索引页面上添加用户名时,我得到以下错误:评论中的ArgumentError#显示“nil”的索引是不是与ActiveModel兼容的对象。它必须实现:to_partial_path。
=render :partial => "header"
%h2 Hello World
=render :partial => "footer"
- home
    - index.html.haml
    - _header.html.haml
    - _footer.html.haml