如何将图像包含为datagrid gem的链接?

时间:2015-05-26 23:21:07

标签: ruby-on-rails ruby ruby-on-rails-4 datagrid

我试图在Rails 4中实现datagrid gem,但我不确定如何在Grid类中包含链接。

我目前使用的是UsersGrid类:

class UsersGrid
  include Datagrid

  scope do
    User.order("users.created_at desc")
  end

  column(:avatar) do |user|
    if user.avatar?
      link_to ActionController::Base.helpers.image_tag(user.avatar.url, alt: "Profile"), user_path(user)
    else
      link_to ActionController::Base.helpers.image_tag("profile.gif", alt: "Profile"), user_path(user)
    end
  end
end

这会生成以下错误消息,引用link_to行:

undefined method 'user_path' for #<ActionView::Base:0x007f821d3115b8>

我应该如何调整代码以使链接正常工作?

其他信息:

查看页面:

<%= datagrid_form_for @grid, :method => :get, :url => users_path %>
<%= will_paginate(@grid.assets) %>
<%= datagrid_table(@grid) %>
<%= will_paginate(@grid.assets) %>

控制器方法:

def index
  @grid = UsersGrid.new(params[:users_grid]) do |scope|
    scope.where(admin: false).page(params[:page]).per_page(30)
  end
  @grid.assets
end

2 个答案:

答案 0 :(得分:3)

我找到了解决方案:我必须将:html => true添加到column(:avatar, :html => true)。这样,html代码(例如link_to)就可以工作,我也不再需要ActionController::Base.helpers来访问image_tage方法了。

答案 1 :(得分:0)

听起来您没有为routes.rb中的用户资源配置路由。

要验证并查看可用的路径助手,请转到命令行,导航到项目目录,然后键入rake routes。如果配置正确,您应该看到类似的内容:

user GET    /users/:id/(.:format) users#show

上面示例的最左侧是“Name”,用于生成路径助手。所以在上面的例子中,名称是“user”,Rails将自动生成帮助器user_path,它接受​​一个用户id的参数。因此user_path(1)/users/1的帮助者。如果你传入一个User对象(就像你在你的例子中那样),它只会在后台获取用户的id,例如{}} user_path(current_user)将找到current_user的id并返回/users/1

详细了解佣金路线here

无论如何,如果您的user文件中缺少routes.rb,您可以将这样的内容添加到routes.rb

get '/users/:id', :to => 'users#show', :as => :user

请记住,您可能已经拥有了一些用户资源,因此您可以根据配置文件的方式进行更简单/更清晰的更改。