调用具有多个参数的方法的问题

时间:2011-04-03 19:41:06

标签: ruby-on-rails ruby

我是Ruby和Rails的新手,很抱歉,如果这看起来太棒了。 我创建了一个名为stream的资源和另一个名为tasks的资源,并使用has_many和belongs_to正确映射它们。一切正常,直到我决定在Stream.show视图中添加“快速任务添加表单”:

以下是表单的视图代码:

<%= form_for(@task) do |f| %>
    <%= render 'shared/error_messages', :object => f.object %>
  <div class="field">
    <%= f.text_field :title %>  <%= f.submit "Add Task" %>
<%= hidden_field_tag(:stream_id, @stream.id) %>
  </div>
<% end %>

这是我的Stream.show操作:

def show
  @stream = Stream.find(params[:id])
  @user = User.find(@stream.user_id)
  @tasks = @stream.tasks.paginate(:page => params[:page])
  @title = @stream.title
  @task = Task.new
end 

这是我的任务控制器:

class TasksController < ApplicationController

  def create
    @stream  = Stream.find(params[:stream_id])
    @stream.tasks.create!({:title => params[:task][:title], :user_id => 1, :owner => 1})

    if @stream.save
      flash[:success] = "Task created succesfully!"
    else
      flash[:error] = "Error creating task"
    end

    redirect_to @stream
  end
end

对我来说非常基本。问题是当它执行tasks.create时,我收到以下错误消息:“验证失败:用户不能为空,所有者不能为空”

我做错了什么?

编辑:从评论中添加模型代码

class Stream < ActiveRecord::Base 
  attr_accessible :title 
  belongs_to :user 
  has_many :tasks, :dependent => :destroy 
  validates :title, :presence=> true, :length => { :maximum =>50 } 
  validates :user_id, :presence => true 
end 

class Task < ActiveRecord::Base 
  attr_accessible :title 
  belongs_to :stream 
  validates :title, :presence=> true, :length => { :maximum =>70 } 
  validates :user_id, :presence => true 
  validates :owner, :presence => true 
  validates :stream_id, :presence => true 
  default_scope :order => "updated_at" 
end

2 个答案:

答案 0 :(得分:0)

您应该从STREAM对象

设置{{1and1}}
user_id

答案 1 :(得分:0)

很遗憾,我目前无法测试我的建议,但您可能需要添加

Attr_accessible :user,:owner

到任务模型,因为您使用哈希大量分配这些字段。