2012-01-11 305 views
0

我是Ruby on Rails的新手,并且为自己设定了一个小项目来掌握它。该项目很简单,只是一个人可以发布工作的基本工作板。我也想让用户有一个技能部分。我让用户与会话一起创建,并且还创建了作业,以便用户可以发布作业并仅编辑自己的作品。我现在希望用户添加与自己相关的技能。对于在用户视图中查看用户配置文件的方式,我很困惑,因为它也会显示他们的技能。我认为我不需要为技能创造一个新的脚手架,并创建一个关系用户has_many技能等。这是正确的吗?另外我怎样才能获得在用户配置文件中显示的技能。Ruby on rails控制器和视图

任何帮助将非常感激。

回答

1

你绝对是在正确的轨道上。你需要做的是设置Skill模型/脚手架,除了通常的字段外,还有一个类型为integer的user_id。这是存储技能所属用户的外键。然后,您可以设置技能模型以与用户建立belongs_to关联。因此,在代码中,你可以做这样的事情:

@skill.user 
@user.skills 

从本质上讲,一旦用户连接到他们的技能,这是比较容易证明他们/user/1例如

<p><%= @user.name %> has the following skills</p> 
<ul> 
<% @user.skills.each do |skill| %> 
    <li><%= skill.title %></li> 
<% end %> 
</ul> 

我只是猜测在那里的属性名称,但你明白了。

然而

要完全诚实的,我真的从许多攻击这个很多方法。你有两个独立的模型,技能和用户。然后你有一个叫SkillsUser(缺少表名的结尾复数)。这意味着您可以拥有一组保存的技能,例如。

  • 数学
  • 计算
  • 编程
  • 营销技能

然后是一个技能记录到多个用户关联。

class Skill < ActiveRecord::Base 
    has_many :skills_users 
    has_many :users, :through => :skill_users 

end 

class User < ActiveRecord::Base 
    has_many :skills_users 
    has_many :skills, :through => :skill_users 

end 

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

有两个的has_many声明这两款机型基本上可以让你仍然使用了诸如:

@user.skills 
@skill.users 

而不必引用的之间的连接模式。