![](/img/trans.png)
[英]'current_user' undefined in rails_admin with clearance
[英]rails_admin setting current_user in controller
我有一個事件模型:
class Event < ActiveRecord::Base
belongs_to :author, class_name: 'User'
end
我可以輸入控制台:
e=Event.last
e.author
在rails_admin中,當我創建一個新事件時,我不想在表單中顯示author_id字段。 我想在控制器中設置這樣的東西:
@e=Event.new(params)
@e.author_id=current_user.id
@e.save
可以在rails_admin中執行嗎?
我在官方維基中找到了這個文檔 ,但我不想使用cancan能力,我不想在表單中設置一個隱藏字段的author_id字段因為安全性很危險,實際上是POST請求可以使用自定義author_id覆蓋。 我想簡單地在控制器中分配author_id。 有可能嗎?
我沒有找到干凈的方法在rails_admin中執行此操作。 這是一個未解決的問題: https : //github.com/sferik/rails_admin/issues/1855 。
這可能不是最佳選擇,但您可以在create action中覆蓋全局邏輯。 看看它是如何工作的: https : //github.com/sferik/rails_admin/blob/master/lib/rails_admin/config/actions/new.rb 。
有一個register_instance_option :controller
塊。 這意味着您可以通過配置傳遞此選項。 更多信息: https : //github.com/sferik/rails_admin/wiki/Actions 。
所以,如果你真的需要它,你可以編輯/config/initializers/rails_admin.rb
:
RailsAdmin.config do |config|
config.actions do
dashboard # mandatory
index # mandatory
new do
controller do
proc do
if request.get? # NEW
@object = @abstract_model.new
@authorization_adapter && @authorization_adapter.attributes_for(:new, @abstract_model).each do |name, value|
@object.send("#{name}=", value)
end
if object_params = params[@abstract_model.to_param]
@object.set_attributes(@object.attributes.merge(object_params))
end
respond_to do |format|
format.html { render @action.template_name }
format.js { render @action.template_name, layout: false }
end
elsif request.post? # CREATE
@modified_assoc = []
@object = @abstract_model.new
satisfy_strong_params!
sanitize_params_for!(request.xhr? ? :modal : :create)
@object.set_attributes(params[@abstract_model.param_key])
@authorization_adapter && @authorization_adapter.attributes_for(:create, @abstract_model).each do |name, value|
@object.send("#{name}=", value)
end
# customization
if @object.class == Event
# do whatever you want
end
if @object.save
@auditing_adapter && @auditing_adapter.create_object(@object, @abstract_model, _current_user)
respond_to do |format|
format.html { redirect_to_on_success }
format.js { render json: {id: @object.id.to_s, label: @model_config.with(object: @object).object_label} }
end
else
handle_save_error
end
end
end
end
end
export
bulk_delete
show
edit
delete
show_in_app
end
end
pereleguine今天用2年前的評論拯救了我的屁股。 謝謝謝謝。
我不得不進行一次修改並刪除satisf_strong_params! 它再次非常hacky,但它的工作原理:
RailsAdmin.config do |config|
config.actions do
dashboard # mandatory
index # mandatory
new do
controller do
proc do
if request.get? # NEW
@object = @abstract_model.new
@authorization_adapter && @authorization_adapter.attributes_for(:new, @abstract_model).each do |name, value|
@object.send("#{name}=", value)
end
if object_params = params[@abstract_model.to_param]
@object.set_attributes(@object.attributes.merge(object_params))
end
respond_to do |format|
format.html { render @action.template_name }
format.js { render @action.template_name, layout: false }
end
elsif request.post? # CREATE
@modified_assoc = []
@object = @abstract_model.new
satisfy_strong_params!
sanitize_params_for!(request.xhr? ? :modal : :create)
@object.set_attributes(params[@abstract_model.param_key])
@authorization_adapter && @authorization_adapter.attributes_for(:create, @abstract_model).each do |name, value|
@object.send("#{name}=", value)
end
# customization
if @object.class == Event
# do whatever you want
end
if @object.save
@auditing_adapter && @auditing_adapter.create_object(@object, @abstract_model, _current_user)
respond_to do |format|
format.html { redirect_to_on_success }
format.js { render json: {id: @object.id.to_s, label: @model_config.with(object: @object).object_label} }
end
else
handle_save_error
end
end
end
end
end
export
bulk_delete
show
edit
delete
show_in_app
end
結束
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.