【问题标题】:only showing button to index action when there are objects listed in the index(in the database)仅当索引中列出了对象(在数据库中)时才显示索引操作的按钮
【发布时间】:2014-05-22 14:36:00
【问题描述】:

我有一个按钮,通过我在路线中设置的 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

【问题讨论】:

    标签: ruby button model-view-controller ruby-on-rails-4 erb


    【解决方案1】:

    当您需要查询模型对象时,您正在检查路径助手 all_project_updates_pathall_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?
    

    如果@project 有任何更新,它将返回true

    除了您的直接问题之外,我建议您考虑nested resources 是否更适合这种用法。你可以像这样声明你的路线:

    resources :projects do
      resources :project_updates
    end
    

    然后您将获得project_project_updates_path(@project),并且不再需要您的自定义路由,该路由几乎复制了该功能。

    【讨论】:

      【解决方案2】:

      试试这个:

      <% if @updates.any? %>
          <%= button_tag ... %>
      <% end %>
      

      @updatesProjectUpdate 对象的空集合(准确地说是ActiveRecord_Relation)如果没有找到记录,则不是nil

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-28
        • 1970-01-01
        • 1970-01-01
        • 2022-12-05
        • 1970-01-01
        • 1970-01-01
        • 2018-09-19
        相关资源
        最近更新 更多