我试图在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
答案 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
请记住,您可能已经拥有了一些用户资源,因此您可以根据配置文件的方式进行更简单/更清晰的更改。