Проблемы вызова метода с несколькими аргументами - PullRequest
0 голосов
/ 03 апреля 2011

Я новичок в Ruby и Rails, так что извините, если это выглядит слишком нуб.Я создал ресурс под названием stream и другой ресурс под названием tasks и правильно сопоставил их с помощью has_many и own_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 %>

Вот мой поток.show action:

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 голосов
/ 08 апреля 2011

К сожалению, я не могу проверить свое предложение в настоящее время, но вам, возможно, придется добавить

Attr_accessible :user,:owner

Для модели задачи, поскольку вы массово присваиваете это поле с помощью хеша.

0 голосов
/ 04 апреля 2011

Вы должны установить user_id и owner для объекта STREAM

class TasksController < ApplicationController

  def create
    @stream  = Stream.find(params[:stream_id])
    @stream.tasks.create!({:title => params[:task][:title], :user_id => 1, :owner => 1})
    @stream.user_id = 1
    @stream.owner = 1
    if @stream.save
      flash[:success] = "Task created succesfully!"
    else
      flash[:error] = "Error creating task"
    end

    redirect_to @stream
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...