[英]Ruby on Rails: How to extract URL parameter and insert the value inside a variable
我需要从我的 url 中提取一个参数并将其插入到我的数据库中以供推荐系统使用。
假设这个id = 1
用户与另一个用户分享了他的链接,网址将是:
https://www.example.com/signup?referredBy=1
当新用户创建他的帐户时,我希望为字段referredBy
分配来自referredBy
参数的值,该值应该是一个整数。
我试过做
@user.referredBy = [:referredBy]
但它没有成功。
任何帮助表示赞赏。
太感谢了。
编辑
我的index.html.erb
是:
<% if current_user %>
Logged in as <%= current_user.nomeUsuario %>
<%= link_to "Log out", logout_path %>
<% end %>
<p id=”notice”><%= notice %></p>
<% else %>
<%= link_to "Sign up", signup_path %>
<%= link_to "Log in", login_path %>
<% end %>
我的new.html.erb
是:
<h1>New User</h1>
<% if current_user %>
<% controller.redirect_to root_url %>
<% else %>
<%= render 'form', user: @user %>
<%= link_to 'Back', login_url %>
<% end %>
我的_form.html.erb
是:
<%= form_with(model: user) do |form| %>
<% if user.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(user.errors.count, "error") %> prohibited this user from being saved:</h2>
<ul>
<% user.errors.each do |error| %>
<li><%= error.full_message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= form.label :name, "Full Name" %>
<%= form.text_field :nomeUsuario %>
</div>
<div class="field">
<%= form.label :name, "E-mail" %>
<%= form.text_field :email %>
</div>
<div class="field">
<%= form.label :name, "Password" %>
<%= form.password_field :password %>
</div>
<div class="field">
<%= form.label :name, "Password Confirmation" %>
<%= form.password_field :password_confirmation %>
</div>
<div class="field">
<%= form.label :name, "Tipo do Plano" %>
<%= form.select :tipoPlano, ["Gratuito", "Mensal", "Anual"], selected: "Gratuito" %>
</div>
<%= form.hidden_field :indicadoPor, params[:indicadoPor] %>
<div class="actions">
<%= form.submit %>
</div>
<% end %>
我的user_controller.rb
是:
class UsersController < ApplicationController
before_action :set_user, only: %i[ show edit update destroy ]
# GET /users/new
def new
@user = User.new
end
# GET /users/1/edit
def edit
end
# POST /users or /users.json
def create
@user = User.new(user_params)
set_tipoPlano
@user.indicadoPor = params[:indicadoPor]
respond_to do |format|
if @user.save
format.html { redirect_to root_url, notice: "User was successfully created." }
format.json { render root_url, status: :created, location: @user }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /users/1 or /users/1.json
def update
respond_to do |format|
if @user.update(user_params)
set_tipoPlano
format.html { redirect_to root_url, notice: "User was successfully updated." }
format.json { render :show, status: :ok, location: @user }
else
format.html { render :edit, status: :unprocessable_entity }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
end
# Only allow a list of trusted parameters through.
def user_params
params.require(:user).permit(:email, :password, :password_confirmation, :nomeUsuario, :tipoPlano, :valorPlano, :indicadoPor, :comissaoAcumuladaAtual, :comissaoASerRetirada)
end
def set_tipoPlano
if(@user.tipoPlano == "Gratuito")
@user.valorPlano = 0.0
elsif(@user.tipoPlano == "Mensal")
@user.valorPlano = 49.90
elsif(@user.tipoPlano == "Anual")
@user.valorPlano = 39.90
end
end
end
如果您需要其他东西,请告诉我! 非常感谢你的帮助。
回答如下
我已经修好了。
我只需要将表单更改为:
<%= form.hidden_field :indicadoPor, value: params[:indicadoPor] %>
我忘记了=
,所以没有呈现表单。 另外,我已经从控制器中删除了@user.referredBy = params[:referredBy]
。 现在一切都很好。
谢谢你们,女孩和非二进制文件到目前为止的帮助!
[:referral]
这是一个具有单个值的数组。 该值是一个符号:referral
。 我不确定您的referredBy 列是什么类型,但几乎可以肯定它会抱怨给定了一组符号。
你要
params[:referral]
params 是一个类似哈希的对象,包含 url/(有时是正文)中的参数。 因此params[:referral]
在 params 散列中查找:referral
符号并返回用户提供的任何内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.