Ruby on Rails:使用两个数据库记录字段填充下拉列表

时间:2016-08-02 11:10:40

标签: ruby-on-rails ruby ruby-on-rails-4 search drop-down-menu

在我的数据库中,我有一个类似于:

的Users表
<%= f.select :from_name, [session[:user_id],session[:user_id]] %>

我要做的是在表格中制作一个下拉菜单,允许用户选择他们的名字或他们的公司,例如当Steve Jobs登录时,他可以在下拉菜单中选择“Steve”或“Apple”。

到目前为止我所尝试的是以下内容:

<%= f.select :from_name, [@user.firstname,@user.company] %>

这显然不起作用,因为它只返回登录用户的用户ID。

undefined method

这给了我nil:NilClass`

的错误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 名字

我的用户控制器如下:

<%= 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 %>

我的_form.html.erb是:

@objc protocol StyleKitSettableImage {
    func setImage(image: UIImage!)
}

我不太确定如何解决这个问题,有人可以帮忙。

3 个答案:

答案 0 :(得分:1)

@BenSmith我猜你正在访问EmailsController。在该控制器的新方法或编辑方法上,没有@user变量。

在您的编辑和新方法中添加

@user = User.find(session[:user_id])

答案 1 :(得分:0)

  

nil的未定义方法firstname:NilClass

似乎有些@usernil

创建帮助程序并检查是否存在@user

<%= f.select :from_name, dropdown_values %>

<强> application_helper.rb

def dropdown_values
  if @user.present?
    [@user.firstname, @user.company]
  else
    ['default', 'values']
  end
end

答案 2 :(得分:0)

<p>
    <%= f.label :from_name %><br>
    <%= f.select :from_name, [current_user.firstname, current_user.company] if @user.present?%>
  </p>

因为User.new时间创建空白对象并没有找到username.i希望它能帮到你。