2015-02-11 38 views
1

我有一个Developers Table和一个Projects Table。我试图在我的Rails应用程序中分配这两个表之间的一对多关系。我是否会将开发人员添加到项目中?在Ruby on Rails中使用“append”运算符的一对多关联

开发商属于项目 ,项目有很多开发人员

所以我做了以下。

我创造了这个方法:

def add_to_project 


@project = Project.find_by(:title => params[:title]) 
@developer = Developer.find_by(:name => params[:name]) 

unless @developer.nil? || @project.nil? 

    # @project.developers.push(@developer) 
    @project.developers << @developer 

    if @project.save 

    flash[:notice] = "project was added successfully" 
    else 
    flash[:notice] = "project was not added successfully" 
    end 

else 
    flash[:notice] = "project was not added successfully" 

end 

redirect_to(:action => 'add_dev_proj') # this goes to a page that shows the two tables with the updates 
end 

我获得我构建了下面这样的的form_tag的标题和名字的值:

<%= form_tag(:controller => 'projects', :action => 'add_to_project') do %> 
<%= text_field_tag('name', params[:name]) %> 
<%= text_field_tag('title', params[:title]) %> 

<%= submit_tag("Add dev to project") %> 
<% end %> 

尝试使用导轨这种方法时,我的问题是控制台它的工作原理,但在我的网络应用程序没有修改正在进行。有什么我在这里失踪。另外我确定我的关联是在我的模型中定义的。

任何见解都会很棒,非常感谢。

+0

为什么你不使用has_many关系,你不必使用'append'然后 – Sontya 2015-02-11 10:44:11

+0

有很多使用'has_many:developers',但问题是当我想添加开发人员到我的项目这是使用追加“<<”运算符完成。 – 2015-02-11 10:52:44

+0

在开发人员模型中添加'belongs_to:project'并在项目模型中添加'has_many:developers',并且您在开发人员表中添加了foreign_key作为'project_id' – Sontya 2015-02-11 10:57:50

回答

0

在开发模式

belongs_to :project 

在项目模型

has_many: developers 

在开发商表中添加foreign_keyproject_id

然后你就可以直接调用

@project = Project.find_by(title: params[:title]) 
@project.developers.create(firstname: params[:name]) 
0

我忘记提及的一个缺失细节是我的开发人员表有一个密码,并且我启用了密码验证,导致无法保存每当我打电话给developer.save时。现在我提供了developer.password作为一个实验(我90%肯定它会工作),然后保存成功“我的数据库已更新”。

当我试图追加

irb(main):030:0> dev.save 
(0.1ms) BEGIN 
Developer Exists (0.2ms) SELECT 1 AS one FROM `developers` WHERE (`developers`.`email` = BINARY '[email protected]' AND `developers`.`id` != 1) LIMIT 1 
(0.1ms) ROLLBACK 
=> false 

该错误消息我后保存:

irb(main):031:0> dev.errors.full_messages 
=> ["Password can't be blank", "Password is too short (minimum is 4 characters)"] 

所以我的下一步就是要找到一种方法,让我的应用程序知道,我是管理员并且不需要认证密码以便成功保存。

非常感谢您的时间和建议......干杯:-)。