ruby-on-rails-4 – 如何在另一个视图内部渲染视图(轨道4)

嗨,我想通过说我是编码新手来做序.

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

A.通过渲染部分

B.通过更新控制器

(我完全错了,但这些是我怀疑的哈哈)

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

我怎样才能做到这一点?
我尝试渲染部分但我总是得到一个错误.

我尝试了下面的代码

这让我的评论显示页面上,但是当我添加

@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,则应首先在同一操作中实例化两个实例变量,然后在同一操作中呈现两个部分.
你是怎样做的?简单.
首先,您进入刚刚显示的控制器并编辑该动作.

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',formats: [html]
   end     
end

第二:你去你的/app/views/reviews/show.html.erb模板并将这两个部分放在那里(这只是一个例子,调整你的标记以满足你的需要).

<h1> Reviews and Logs</h1>
<div id="reviews_part">
 <%= render @reviews %>
</div>
<div id="logs_part">
  <%= render @logs %>
</div>

现在创建2个新的部分/app/views/reviews/_review.html.erb和/app/views/logs/_log.html.erb并将所有需要的标记放在那里(使用常规变量查看并记录以重复对象) . Rails会根据需要自动重复这些部分.

或者你可以明确地调用部分渲染

<div id="reviews_part">
  <% @reviews.each do |review| %>
   <%= render review %> 
        which is the same as
   <%= render partial:"reviews/review",locals:{review:review} %>
  <% end %>
</div>

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...