[英]In Rails 5, is there a way to modify the underlying params in a controller? Or give it a default?
[英]What's the right way to modify the params passed to controller in rails 3.1.0?
在我們的Rails 3.1.0應用程序中,我們需要在創建和更新時修改傳遞給rfq控制器的參數。 例如,我們想將當前用戶ID記錄在input_by_id下。 我們所做的是:
@rfq.input_by_id = session[:user_id]
它按預期工作。 同樣,當need_report字段為false時,report_language字段也應該為nil。 我們決定在rfq控制器中添加以下行,以確保在need_report為false時將nil傳遞給report_language:
@rfq.report_language = nil unless params[:need_report]
但是,由於數據驗證失敗,此添加會導致rspec案例失敗(在控制器的創建/更新中)。 但是,當我們啟動該應用程序時,當need_report為false時,它無需保存report_language即可正常運行。 我想知道上面的行是否不是使用params [:need_report]進行@rfq更新的正確方法。
非常感謝。
更新:
控制器代碼:
def create
if has_create_right?
@rfq = Rfq.new(params[:rfq], :as => :roles_new )
@rfq.input_by_id = session[:user_id]
#save sales_id selected
if sales? && member? && !team_lead?
@rfq.sales_id = session[:user_id]
end
#view page may carry the hidden report language even if need_report == false
@rfq.report_language = nil unless params[:need_report]
#save into join table rfqs_standards
params[:rfq][:standard_ids].each do |sid|
@rfq.standards << Standard.find(sid.to_i) if !sid.nil? && sid.to_i > 0
end unless params[:rfq][:standard_ids].nil?
#save into join table rfqs_test_items
params[:rfq][:test_item_ids].each do |tid|
@rfq.test_items << TestItem.find(tid.to_i) if !tid.nil? && tid.to_i > 0
end unless params[:rfq][:test_item_ids].nil?
if @rfq.save!
redirect_to URI.escape("/view_handler?index=0&msg=RFQ saved!")
else
flash.now[:error] = "RFQ not saved!"
render 'new'
end
else
redirect_to URI.escape("/view_handler?index=0&msg=No rights!")
end
end
添加@rfq.report_language = nil unless params[:need_report]
后,測試用例失敗, @rfq.report_language = nil unless params[:need_report]
it "should be successful for corp head" do
session[:corp_head] = true
session[:user_id] = 1
s = Factory(:standard)
rfq = Factory.attributes_for(:rfq, :need_report => true, :report_language => 'EN')
rfq[:standard_ids] = [s.id] # attach standard_id's to mimic the POST'ed form data
get 'create', :rfq => rfq
#response.should redirect_to URI.escape("/view_handler?index=0&msg=RFQ saved!")
response.should render_template('new')
end
問題在於您根本就沒有在看正確的價值。
get 'create', :rfq => rfq
將導致類似{:rfq => {...}}
的參數哈希
因此, @rfq.report_language = nil unless params[:rfq][:need_report] == 'true'
您需要@rfq.report_language = nil unless params[:rfq][:need_report] == 'true'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.