[英]How do you add an extra query string parameter via a form submit in Ruby on Rails?
[英]How do I add extra data to model before submit from form in Rails
我有一個用戶填寫的表單,需要在數據庫中創建對象之前向其添加一些“幕后”數據。 例如,諸如referrer_url, clout_score
等數據。我該如何去做? 方法應該放在控制器或模型中嗎?
例如,我需要能夠將create_url
方法返回的內容添加到中:
users_controller.rb
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
flash[:success] = "You've been added to the waiting list!"
render 'show'
else
render 'new'
end
end
private
def user_params
params.require(:user).permit(:name, :email, :use_type)
end
def create_url
url = SecureRandom.hex(4)
end
結束
數據庫中的用戶表
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.string :email
t.integer :init_spot
t.integer :current_spot
t.string :referrer_url
t.integer :clout
t.timestamps null: false
end
end
end
我是否應該在同一控制器操作中執行@user.update_attributes
並以這種方式調用我的方法? 喜歡:
if @user.save
@user.update_attributes(referrer_url: create_url, clout: calc_clout, etc.)
flash[:success] .....
render 'new'
做到這一點的最佳方法是什么?
謝謝!
您可以在控制器中使用ActiveRecord::Core#new
方法的哈希選項:
@user = User.new(user_params.merge(referrer_url: create_url))
或將所有內容移到一個單獨的方法中,以獲取更清晰,更易讀的代碼:
@user = User.new(user_params_with_additional_data)
private
def user_params_with_additional_data
user_params.merge(referrer_url: create_url)
end
這對我有用:
user.rb
before_save :add_more_info
def add_more_info
self.referrer_url = create_url,
self.clout = calc_clout
end
請注意,我通常不在模型中使用
self
,但是以某種方式,這是我可以使其與before_save
回調一起使用的唯一方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.