Rails以一种形式构建多个关系

时间:2011-12-04 11:39:43

标签: ruby-on-rails model-view-controller relationships

Ruby上的新手,我已经成功构建了一个html表单,其中用户的“项目”模型可以“跟随”(或者我称之为“pfollow”)其他“植物”模型。唯一的问题是,当用户试图在一个表单上“追加”多个工厂时,我构建的代码不起作用,这迫使用户多次点击“提交”以获得更多工厂。如果用户一次从选择框中选择多个工厂,我的“项目”模型和我的“预关系”控制器会阻塞输入,这是一个数组,而不是预期的单个整数(也就是“pfollower_id”)来自“prelationships”控制器用于创建动作的工厂。)

如何教我的应用程序接受一系列“pfollower_id(s)”,然后创建多个工厂预关系?

这是错误:

undefined method `id' for #<Array:0x26abe70>
app/models/project.rb:35:in `pfollow!'
app/controllers/prelationships_controller.rb:6:in `create'
Request

Parameters:

{"utf8"=>"✓",
  "authenticity_token"=>"NKqa1f0M2yPLQDHbRLnxl3SiwBeTus/1q1hpZjD7hgY=",
  "prelationship"=>{"pfollower_id"=>["4",
  "5"]},
  "project_id"=>"90",
  "commit"=>"Pfollow"}

我的“预关系”控制器:

class PrelationshipsController < ApplicationController

  def create          
    @project = Project.find(params[:project_id])                                  
    @plant = Plant.find(params[:prelationship][:pfollower_id])
      @project.pfollow!(@plant)
   respond_to do |format|
     format.html { redirect_to @project }
     format.js
   end
  end    
end    

嫌犯“pfollow!”我的模型中跟踪指示的方法也是有罪的:

  def pfollow!(pfollowed)
    prelationships.create!(:pfollowed_id => pfollowed.id)
  end         

表单工作正常,所以只是这个控制器和方法无法处理pfollower_ids数组。

我迫切需要帮助!任何和所有方向都会非常有帮助。

1 个答案:

答案 0 :(得分:1)

使用控制器中的each方法对其进行细分:D

params[:prelationship][:pfollower_id].each do |p|
 @project.pfollow!( Plant.find(p) )
end

如果只返回一个参数,我猜这会有效。 完全不确定。