Ali*_*enn 5 views controllers partials ruby-on-rails-4
嗨,我想通过说我是编码新手来做序.
我有一个问题,我认为可以通过两种方式解决
A.通过渲染部分
B.通过更新控制器
(我完全错了,但这些是我怀疑的哈哈)
我有两个控制器/视图"评论"和"日志".我希望它们都出现在同一页面上.
我怎样才能做到这一点?我尝试渲染部分但我总是得到一个错误.
我尝试了下面的代码:
这让我的评论显示在页面上,但是当我添加时
@log = @user.logs.all
Run Code Online (Sandbox Code Playgroud)
对它来说,它不会像审查那样将所有日志拉到页面.
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
Run Code Online (Sandbox Code Playgroud)
首先要做的事情.视图是指控制器中的操作.因此,每个控制器可以有多个视图,甚至没有.
因此,如果要渲染@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
Run Code Online (Sandbox Code Playgroud)
第二:你去你的/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>
Run Code Online (Sandbox Code Playgroud)
现在,创建2个新的泛音/app/views/reviews/_review.html.erb和/app/views/logs/_log.html.erb,并把所有需要的标记有(使用普通的变量review,并log以ADRESS重复对象).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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8882 次 |
| 最近记录: |