在RelationshipsController中创建Rails app ArgumentError

时间:2015-03-26 06:21:54

标签: sql ruby-on-rails ruby

我的人际关系控制器和商店模型之间有问题。我使用关系在商店和用户之间创建了一种类似于朋友的关联。在尝试将用户添加为商店时,我收到以下错误:

ArgumentError in RelationshipsController#create
wrong number of arguments (0 for 1)

在商店模型的add(user)的第一行:

shop.rb

class Shop < ActiveRecord::Base
  has_many :relationships
  has_many :users, through: :relationships
.
.
.
def add(user)
  relationships.create(user_id: other_user.id)
end
.
.
end

此命令由&#34;创建&#34;触发。在关系控制器中:

relationships_controller.rb

class RelationshipsController < ApplicationController
  before_action :logged_in_shop

  def create
    user = User.find(params[:user_id])
    current_shop.add.relationship(user)
    redirect_to user
  end

  def destroy
    user = Relationship.find(params[:user_id])
    current_shop.remove.relationship(user)
    redirect_to user
  end
end
单击此添加按钮后

<%= form_for(current_shop.relationships.build) do |f| %>
  <div><%= hidden_field_tag :user_id, @user.id %></div>
  <%= f.submit "Add", class: "btn btn-primary" %>
<% end %>

由于某种原因,参数(用户)不会被带到add(user)方法。我怎样才能做到这一点? (我知道我的语法中有几个错误,这是一个工作版本。寻找这个特定错误的帮助,在我摆脱这个错误后会处理其他错误。)

关系模型

class Relationship < ActiveRecord::Base
  belongs_to :user
  belongs_to :shop
  validates :user_id, presence: true
  validates :shop_id, presence: true
end

1 个答案:

答案 0 :(得分:0)

引发错误是因为您在没有任何参数的情况下调用了add

current_shop.add.relationship(user)

由于你已经实现了add一个参数,你应该传递它

def create
  user = User.find(params[:user_id])
  current_shop.add(user)  
  redirect_to user
end