我想在if语句中检查url参数,但是我不知道正确的语法,或者甚至可能。
到目前为止我知道
<% if param(order: :top) %>
<% elsif param(order: :top && live: :true) %>
我都知道错了。
我要检查的url参数是:
www.url.com/?live=true&order=top
或
www.url.com/?order=top
index.html.erb
<% current_user.following_channels.each do |c| %>
<% if param(order: :top) %>
<% c.discussions.where('created_at > ?', 1.days.ago).each do |discussion| %>
<% elsif param(order: :top && live: :true) %>
<% c.discussions.where('live = ?', true).each do |discussion| %>
<% end %>
Some more code...
<% end %>
答案 0 :(得分:0)
无论如何,您的代码对我而言意义不大:
if params[:order] == 'top'
if params[:live] == 'true'
c.discussions.where(live: true).each do |discussion|
.
.
.
end
else
c.discussions.where('created_at > ?', 1.days.ago).each do |discussion|
.
.
.
end
end
end
此外,在学习Rails时,应该将所有逻辑移至控制器和模型。
编辑:将逻辑移至控制器(未经测试的代码,可能会失败):
def index
@channels = current_user.following_channels.includes(:discussions)
@channels = @channels.where('discussions.created_at > ?', 1.days.ago) if params[:order] == 'top'
@channels = @channels.where(discussions: {live: true}) if params[:live] == 'true'
end
end
index.html.erb:
<% @channels.each do |channel| %>
<div class="channel-container">
<h2><%= channel.name %></h2>
<ul>
<% channel.discussions.each |discussion| %>
<li><%= discussion.text %></li>
<% end %>
</ul>
</div>
<% end %>
这样,视图对如何获取数据一无所知,只是将其呈现给用户。
您仍然可以将逻辑从控制器转移到模型,但是首先要对这一切感到满意。
答案 1 :(得分:0)
params["live"].nil? #this will return false if there is no url parameter called "live"
params["live"].blank? # this will return false if url parameter live is blank
对于其他参数,继续。正如CAmador所说,您需要将代码大部分移至控制器(在处理参数的情况下,代码应移至控制器)。