Ruby on Rails - 在表单助手中选择始终保存第一个选项

时间:2017-10-03 21:51:00

标签: ruby-on-rails actionview

我正在开发一个项目,当用户创建时,他们应该被添加到团队中。创建新团队时,团队列表会更新。

但是,每次保存用户时,团队都会保存为下拉列表中的第一项。

  <%= f.label :team %>
  <%= f.select :team, {}, {}, id: :user_team do %>
      <% @teams.each do |team| %>
        <%= content_tag :option, team.name, value: team.id %>
      <% end %>
  <% end %>

控制器:

def create
team = Team.find_by(params[:user_team]).id

user = User.new(user_params)
user.team_id = team

if (params[:user_admin] == '0')
    user.admin = 'false'
else
    user.admin = 'true'
end

if (user.valid?)
    user.save
    redirect_to "/users/#{user.id}"
else
    flash[:notice] = user.errors.full_messages
    redirect_to '/users/new'
end

def user_params
  params.require(:user).permit(:first_name, :last_name, :username, 
  :password, :password_confirmation, :admin, :team)
end

1 个答案:

答案 0 :(得分:0)

这是一个黑暗的镜头,但您可以尝试添加占位符元素,方法是将include_blank: true传递给您的选择ERB标记,或者提供一个带有如下空值的选项:{{1 }}。前者将是更多的“轨道式”方式,如此处所述:https://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/select

为了构建它,我认为正在发生的是你的select总是默认选择第一个元素,因为没有提示或占位符。如果是这种情况,那么如果你没有主动改变它,那么它每次都会发送第一个选项的值。