[英]Ruby on Rails: Populate dropdown with two fields of database record
In my database I have a Users table that looks something like: 在我的数据库中,有一个Users表,看起来像:
User_ID Firstname Surname Company
1 Steve Jobs Apple
2 Bill Gates Microsoft
What I am trying to do is make a drop down menu in a form that would allow a user to choose from selecting their name or their company, eg when Steve Jobs is logged in he can either select "Steve" or "Apple" in the drop down menu. 我正在尝试做的事情是创建一个下拉菜单,该菜单允许用户从选择他们的姓名或公司的名称中进行选择,例如,当乔布斯登录时,他可以在菜单中选择“史蒂夫”或“苹果”。下拉式菜单。
What I have tried so far is the following: 到目前为止,我已经尝试了以下方法:
<%= f.select :from_name, [session[:user_id],session[:user_id]] %>
Which obviously didn't work because it only returns the user id of the logged in user. 显然不起作用,因为它仅返回已登录用户的用户ID。
<%= f.select :from_name, [@user.firstname,@user.company] %>
Which gave me the error undefined method
firstname for nil:NilClass` 这给了我nil:NilClass错误的
undefined method
名字
My Users controller is as follows: 我的用户控制器如下:
class UsersController < ApplicationController
before_filter :check_authorization, :except => [:show, :new, :create, :search ]
def index
@users = User.all
end
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def edit
@user = User.find(params[:id])
end
def create
@user = User.new(user_params)
@user.role = "customer"
if @user.save
session[:user_id] = @user.id
# Save a copy of the email address entered by the user into the Accounts table
@account = Account.create(email: params[:user][:primaryemailaddress], user_id: session[:user_id])
redirect_to root_path
else
render 'new'
end
end
def update
@user = User.find(params[:id])
if @user.update(user_params)
redirect_to @user
else
render 'edit'
end
end
def destroy
@user = User.find(params[:id])
@user.destroy
redirect_to users_path
end
private
def user_params
params.require(:user).permit(:title, :firstname, :surname, :housenumber, :street, :city, :postcode, :company, :primaryemailaddress, :password)
end
end
And my _form.html.erb is: 我的_form.html.erb是:
<%= form_for(@email) do |f| %>
<% if @email.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@email.errors.count, "error") %> prohibited this email from being saved:</h2>
<ul>
<% @email.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :from_name %><br>
<%= f.select :from_name, [current_user.firstname, current_user.company] %>
</p>
<p>
<%= f.label :From_Email_Address %><br>
<%= f.collection_select :account_id, Account.where(user_id: session[:user_id]),
:id,:email %>
</p>
<p>
<%= f.label :to %><br>
<%= f.text_field :to %>
</p>
<p>
<%= f.label :cc %><br>
<%= f.text_field :cc %>
</p>
<p>
<%= f.label :bcc %><br>
<%= f.text_field :bcc %>
</p>
<p>
<%= f.label :subject %><br>
<%= f.text_field :subject %>
</p>
<p>
<%= f.label :message %><br>
<%= f.text_field :message %>
</p>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
I'm not too sure how to solve this issue, can someone please help. 我不太确定如何解决此问题,请有人帮忙。
@BenSmith I guess you are accessing EmailsController
. @BenSmith我想您正在访问
EmailsController
。 And on that controller's new or edit method there is no @user
variable. 在该控制器的新方法或编辑方法上,没有
@user
变量。
In your edit and new method add 在您的编辑和新方法中添加
@user = User.find(session[:user_id])
undefined method firstname for nil:NilClass
nil:NilClass的未定义方法名字
Seems like some how @user
is nil
好像有些
@user
是nil
create a helper and check for presence of @user
创建一个助手并检查
@user
是否存在
<%= f.select :from_name, dropdown_values %>
application_helper.rb application_helper.rb
def dropdown_values
if @user.present?
[@user.firstname, @user.company]
else
['default', 'values']
end
end
<p>
<%= f.label :from_name %><br>
<%= f.select :from_name, [current_user.firstname, current_user.company] if @user.present?%>
</p>
because User.new time create blank object doesn't find username.i hope its will be help you. 因为User.new time创建空白对象找不到用户名。我希望它将对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.