嗨,我想通过说我是编码新手来做序.
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>