Ruby on Rails,选择多个选中的框,插入db

时间:2014-05-06 10:54:04

标签: ruby-on-rails select ruby-on-rails-4

我有模型,用户可以分开多个项目,项目可以有多个用户。它们由一个名为project_users的表连接在一起。 在我的新项目表单中,我有一个显示当前用户的所有用户名的选择框,可以选择多个用户名。如何为所选的每个用户在project_users中添加一个条目? (或者如果有更好的方法来建模我的数据,请告诉我......)

class Project < ActiveRecord::Base
     has_many :project_users
     has_many :users, :through => :project_users
end

class ProjectUser < ActiveRecord::Base
     has_one :project 
     has_one :user
     belongs_to :project
     belongs_to :user
end

class User < ActiveRecord::Base
    has_many :project_users
    has_many :users, :through => :project_users
end

在我的项目_form.html.erb中我有:

<div class="field">
    <%= "Users assigned to project" %>
    <%= select_tag("user[user_id]", options_from_collection_for_select(User.find(:all), 'id', 'username')) %>
</div>

这将使用所有用户的用户名填充选择框。

projects_controller.rb

def create
@project = Project.new(project_params)

@project_count = Project.count + 1

@project_user = ProjectUser.new
@project_user.user_id = current_user.id
@project_user.project_id = @project_count

respond_to do |format|
  if @project.save

    if @project_user.save
      format.html { redirect_to @project, notice: 'Project was successfully created.' }
      format.json { render action: 'show', status: :created, location: @project }
        else
      format.html { render action: 'new' }
      format.json { render json: @project.errors, status: :unprocessable_entity }
    end

    format.html { redirect_to @project, notice: 'Project was successfully created.' }
    format.json { render action: 'show', status: :created, location: @project }
  else
    format.html { render action: 'new' }
    format.json { render json: @project.errors, status: :unprocessable_entity }
  end
end
end

def project_params
  params.require(:project).permit(:name, :description, :user_id)
end

我是Ruby on Rails的新手,所以任何帮助都会很棒(或链接到相关文章,我在过去的两个小时里试图弄明白这一点后我无法绊倒...)

我现在更新了我的代码,它可以运行,现在将用户添加到project_users!但是现在,我只有一个下拉框,这意味着我每个项目只能选择一个用户。反正有没有选择框,可以选择多个用户?或者我是否必须编辑项目,并将它们一次添加到project_users中?

2 个答案:

答案 0 :(得分:0)

建议您使用像

这样的rails助手
options_from_collection_for_select

options_for_select

rails的主要功能是遵循规则和约定并使用这样的帮助程序,而不是手动尝试编写相同的代码。我最近听到它被称为“脱轨”,这是我第一次在轨道上的'rails'部分对我有意义!

答案 1 :(得分:0)

我还没有对它进行测试,因为我没有在我的家用电脑上进行设置,但它会是这样的。
@project = Project.new(name: params[:name], description: params[:description]) params[user_id].to_a.each do |user_id| @project.project_users.build(user_id: user_id) end