首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用户有几种技能

用户有几种技能
EN

Stack Overflow用户
提问于 2013-12-31 17:03:07
回答 5查看 767关注 0票数 0

我希望我的用户有很多技能。我有一个用户和技能数据库表。

我在has_many_and_belongs_to user.rb中使用了

代码语言:javascript
复制
  has_many :skills

但我不确定这是否正确。在skill.rb

代码语言:javascript
复制
  has_and_belongs_to_many :users

我还创建了一个这样的迁移:

代码语言:javascript
复制
  def change
    create_table :user_skills do |t|
      t.belongs_to :users
      t.belongs_to :skills
   end

这是正确的吗?

因此,如果这是正确的,我如何增加我的用户的新技能?一般的方法是什么?

我所想的,

在更新操作的用户控制器中,我将更新用户的技能并更新user_skills表。这是怎么做的?

另外,如何迭代特定用户的user_skills表?(见)

任何指导、资源、提示都将对我有很大的帮助,因为这是我第一次在Rails中这样做。

谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-12-31 17:34:24

在Rails中,大多数人更倾向于使用has_many : over关联。下面是关于如何使用它的指南:ActiveRecord指南

用户和技能的关联has_many在您的相关模型中如下所示:

代码语言:javascript
复制
class User < ActiveRecord::Base
  has_many :user_skills
  has_many :skills, through: :user_skills
end

class UserSkill < ActiveRecord::Base
  belongs_to :user
  belongs_to :skill
end

class Skill < ActiveRecord::Base
  has_many :user_skills
  has_many :users, through: :user_skills
end

您的迁移看起来应该是:

代码语言:javascript
复制
def change
  create_table :user_skills do |t|
    t.references :user, index: true
    t.references :skill, index: true
  end
end

迁移中的索引是为了更快地查找使用reference_id的索引。这是明智的做法,对所有的参考。

要向用户添加新技能,可以参考此所以回答

要更新用户的技能,可以这样做:

代码语言:javascript
复制
@skill = @user.skills.find(params[:skill_id])
@skill.update(skill_params)

要创建用户的技能,可以这样做:

代码语言:javascript
复制
@user.skills.create(skill_params)

要向用户添加技能,可以在update操作中这样做:

代码语言:javascript
复制
@user.update(user_params)

#app/views/users/edit.html.erb
<%= f.select :skill_ids, Skill.all.collect {|x| [x.name, x.id]}, {}, :multiple => true %>

在使用has_many时,您不需要通过user_skills表来获取特定的用户。但是,您可能需要从某个技能中获得特定的用户。为此,请执行以下操作:

代码语言:javascript
复制
@skill.users.find(user_id)

希望这能帮上忙!

票数 2
EN

Stack Overflow用户

发布于 2013-12-31 17:59:23

如果您也将用户设置为have_and_belong_to_many :skills,那么这将有效。

若要为用户创建新技能,请执行以下操作

User.skills.create!{…}

或将现有技能与用户进行关联

用户<<技能

“在更新操作的用户控制器中,我将更新用户的技能并更新user_skills表。这是如何完成的?”

user = User.find params:id 技能= user.skills

然后,你可以做你喜欢做的用户技能。

“还如何为特定用户遍历user_skills表?(在视图中)”

user.skills.each做技能 ..。 结束

有关HABTM关联的更多信息,请参见basics.html#has-and-belongs-to-many-association-reference

票数 1
EN

Stack Overflow用户

发布于 2013-12-31 17:29:06

原谅我,如果我搞错了,试着填补空白,但我想你想要这样的东西。

控制器

代码语言:javascript
复制
  def index
    #to fetch all skills associated to users (add where u.id=? to fetch for a single user)
    @users = User.select("u.name, s.name").
    from("users u, skills s, users_skills us").
    where("u.id = us.user_id").
    where("s.id = us.skill_id")
  end



  def new
    @user = User.new
    @skills = Skill.all
  end

  def create
    @user = User.new(params[:user])
    ...............................
  end

在create表单中

代码语言:javascript
复制
<%= form_for @user do |f| %>
  <%= f.collection_select(:skill_ids, @skills,:id,:name)%>
  <%= f.submit "Save" %>
<% end %>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20860749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档