【问题标题】:Issues calling a method with multiple arguments调用具有多个参数的方法时出现问题
【发布时间】:2011-07-28 18:24:40
【问题描述】:

我是 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时,我收到以下错误消息:“验证失败:用户不能为空,所有者不能为空”

我做错了什么?

编辑:从注释中添加模型代码

类 Stream :destroy 验证 :title, :presence=> true, :length => { :maximum =>50 } 验证 :user_id, :presence => true 结尾 类任务 true, :length => { :maximum =>70 } 验证 :user_id, :presence => true 验证 :owner, :presence => true 验证 :stream_id, :presence => true default_scope :order => "updated_at" 结尾

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

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

    Attr_accessible :user,:owner
    

    到任务模型,因为您正在使用散列批量分配这些字段。

    【讨论】:

      【解决方案2】:

      您应该在 STREAM 对象中设置 user_idowner

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-14
        • 1970-01-01
        • 2017-09-06
        • 1970-01-01
        • 1970-01-01
        • 2021-05-28
        • 1970-01-01
        相关资源
        最近更新 更多