我有一个按钮,通过我在路线中设置的all_project_updates_path链接到项目更新索引操作。这是我的按钮代码:
<%= button_tag type: "button", :class => "radius" do %>
<%= link_to 'Project Updates', all_project_updates_path(@project), :style => "color: white" %>
<% end %>
我希望只有在数据库中有项目更新时才能看到此按钮。否则我希望这个按钮消失。我试过了:
<% if all_project_updates_path(@project) != nil %>
<%= button_tag type: "button", :class => "radius" do %>
<%= link_to 'Project Updates', all_project_updates_path(@project), :style => "color: white" %>
<% end %>
<% end %>
还
<% if @updates != nil %>
<%= button_tag type: "button", :class => "radius" do %>
<%= link_to 'Project Updates', all_project_updates_path(@project), :style => "color: white" %>
<% end %>
<% end %>
但这似乎不起作用。寻找一个简单的解释,因为我是红宝石的相对初学者。
这是路线:
get 'all_project_updates/:id' => 'project_updates#index', as: 'all_project_updates'
这是我的项目控制器(显示动作)
def show
@project = Project.find(params[:id])
@comments = Comment.all.where(:project_id => @project.id)
@updates = ProjectUpdate.all.where(:project_id => @project.id)
end
这是我的项目更新控制器索引操作:
def index
@projectUpdates = ProjectUpdate.where(:project_id => params[:id])
respond_to do |format|
format.html
end
end
答案 0 :(得分:1)
试试这个:
<% if @updates.any? %>
<%= button_tag ... %>
<% end %>
@updates
是一个空集合(确切地说是ActiveRecord_Relation
)ProjectUpdate
对象,如果没有找到记录,则它不是{{} 1}}。
答案 1 :(得分:1)
当您需要查询模型对象时,您正在检查路径助手all_project_updates_path
。 all_project_updates_path
调用是返回网页之间链接路径的助手。
all_project_updates_path(@project) # => /all_project_updates/1
所以你真的在问:
'/all_project_updates/1'.nil? # => false
因为它只是一个字符串,所以不会是nil。
相反,您应该直接检查project_updates
。我不确定你的模型是如何相关的,但假设Project has_many :project_updates
,试试这个:
if @project.project_updates.any?
如果true
有任何更新,则会返回@project
。
除了您当前的问题,我建议考虑nested resources是否更适合这种用法。您可以这样声明您的路线:
resources :projects do
resources :project_updates
end
然后你会得到project_project_updates_path(@project)
并且不再需要你的自定义路线,它几乎复制了这个功能。