我的Ruby on Rails应用程序中有一个直接的模型,也可以在我的rails_admin实例中找到。 rails_admin的用户需要每天进入并上传CSV或XLS文件,并根据我将在后端呈现的一些逻辑,这将根据CSV / XLS中的数据创建模型的实例。我不需要在文件系统上保留CSV或XLS,所以这不是问题。问题是,我不完全确定如何在rails_admin中获取接口,用户可以上传CSV / XLS,点击上传,后端应该处理剩下的事情。
rails_admin是否支持此功能?我可以通过它创建一个界面,我可以上传文件以供我的某个模型处理吗?
答案 0 :(得分:4)
您可能需要创建自定义操作和视图。一种方法是使用this custom actions plugin。 There is also a tutorial about how to build a custom action here.我也使用过SmarterCSV,效果非常好。
要使用Rails Admin注册自定义操作,您可以在config / initializers / rails_admin.rb中执行此操作:
module RailsAdmin
module Config
module Actions
class YourClass < RailsAdmin::Config::Actions::Base
RailsAdmin::Config::Actions.register(self)
##code here, as explained more below
end
end
end
end
在此课程中,您可以继承任何the base actions。因此,要注册自定义部分,您可以在该课程中执行以下操作:
# View partial name (called in default :controller block)
register_instance_option :template_name do
:your_class
end
你的_your_class部分必须在app / views / rails_admin / main /中,你可以使用multipart处理表单..我不包括部分代码,如果你想让我挥杆它让我知道。
您可能还希望对模型范围采取行动:
register_instance_option :collection? do
true
end
并将控制器代码放入。最好在此处理处理,例如:
register_instance_option :controller do
Proc.new do
@order = Order.import(params[:file])
f = SmarterCSV.process(file.tempfile)
f.each do |r|
#combine date and time fields
r[:date_time] = [r[:date],r[:time]].join(' ')
Order.create("date" => r[:date_time])
end
end
end
接下来,您的操作应该使用RailsAdmin :: Config :: Actions注册(此代码放在config / initializers / rails_admin.rb中):
module RailsAdmin
module Config
module Actions
class ApproveReview < RailsAdmin::Config::Actions::Base
RailsAdmin::Config::Actions.register(self)
end
end
end
end
接下来,需要在config / initializers / rails_admin.rb中的actions配置中列出自定义操作:
RailsAdmin.config do |config|
config.actions do
dashboard
index
new
your_class
show
edit
delete
end
end
本教程中有更多细节,但我认为这应该是一个非常可靠的开始!
答案 1 :(得分:3)
您可以在RailsAdmin中创建自定义操作,该操作将负责获取上传的文件并进行处理。
因此,在您的文件app / admin / your_model.rb中,您可以添加以下内容:
member_action :upload_csv, :method => :post do
# param[:file] will contain your uploaded file
# So add your logic here to open/parse the file
# Take a look at this link: http://railscasts.com/episodes/396-importing-csv-and-excel
end
在您的视图中,只需添加一个包含多部分选项的表单
<%= form_tag import_products_path, multipart: true do %>
<%= file_field_tag :file %>
<%= submit_tag "Import" %>
<% end %>
答案 2 :(得分:-1)