首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Rails中从表单提交之前向模型添加额外的数据?

如何在Rails中从表单提交之前向模型添加额外的数据?
EN

Stack Overflow用户
提问于 2015-06-17 20:47:45
回答 2查看 318关注 0票数 0

我有一个用户填写的表单,在创建我的DB中的对象之前,我需要添加一些额外的“幕后”数据。例如,像referrer_url, clout_score之类的数据,我该怎么做呢?方法应该放在控制器或模型中吗?

例如,我需要能够将create_url返回的方法添加到:

users_controller.rb

代码语言:javascript
复制
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

结束

数据库中的用户表

代码语言:javascript
复制
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,并以这种方式调用我的方法?比如:

代码语言:javascript
复制
if @user.save
      @user.update_attributes(referrer_url: create_url, clout: calc_clout, etc.)
      flash[:success] .....
      render 'new'

做这件事最好的方法是什么?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-17 20:51:36

您可以在控制器中使用ActiveRecord::Core#new方法的散列选项:

代码语言:javascript
复制
@user = User.new(user_params.merge(referrer_url: create_url))

或者将所有这些移到单独的方法中,以获得更清晰、更易读的代码:

代码语言:javascript
复制
@user = User.new(user_params_with_additional_data)

private

def user_params_with_additional_data
  user_params.merge(referrer_url: create_url)
end
票数 2
EN

Stack Overflow用户

发布于 2015-06-17 21:02:29

这对我起了作用:

user.rb

代码语言:javascript
复制
before_save :add_more_info

def add_more_info
  self.referrer_url = create_url, 
  self.clout = calc_clout 
end

注意:我通常不会在模型中使用self,但不知怎么的,这是使它与before_save回调一起工作的唯一方法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30902096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档