выдает неверное количество аргументов (задано 9, ожидается 0) в модели формы - PullRequest
0 голосов
/ 23 марта 2019

Я использую это для построения модели формы (я хочу создать Transaction и Address, и адрес должен принадлежать транзакции).Я получаю ошибку rails wrong number of arguments (given 9, expected 0) и не могу понять, почему.Ошибка в параметрах контроллера, но я не уверен, почему он ожидает 0. Моя модель формы выглядит следующим образом:

class TransactionForm
 include ActiveModel::Model

 attr_accessor :sender_id, :recipient_id, :item_id, :asking_price, :amount, :sender_agreement, :name, :street, :street_2, :state, :zip_code, :phone_number


 validate :sender_id
 validate :recipient_id
 validate :item_id
 validate :asking_price
 validates :amount, presence: true
 validates :sender_agreement, presence: true
 validates :name, presence: true
 validates :street, presence: true
 validates :street_2, presence: true
 validates :state, presence: true
 validates :zip_code, presence: true
 validates :phone_number, presence: true

 def save
  if valid?
   address = create_address
   transaction = create_transaction(address)
  end
 end

 private
 def create_address
  Address.create(name: name, street: street, street_2: street_2, state: state, 
                                    zip_code: zip_code, phone_number: phone_number)
 end

 def create_transaction(address)
  Transaction.create(sender_id: sender_id, recipient_id: recipient_id, item_id: item_id, asking_price: asking_price, amount: amount, sender_agreement: sender_agreement, sender_signed_at: Time.now, address: address)
 end
end

И действия моего контроллера #show и #create и параметры в белом списке выглядяткак это:

#this action is in a separate ItemsController, tho that doesn't really matter
def show
 @transaction = TransactionForm.new
end

#this action is in TransactionsController
def create
 @transaction = TransactionForm.new(transaction_params)
 if @transaction.save
  redirect_to item_path(@transaction.item), notice: "approved"
 else
  redirect_to item_path(@transaction.item), notice: "error"
 end
end

def transaction_params
 params.require(:transaction_form).permit!(:amount, :asking_price, :sender_agreement, :name, :street, :street_2, :state, :zip_code, :phone_number)
end

Моя форма выглядит примерно так:

<%= form_for @transaction, url: transactions_path do |f| %>
 <%= f.hidden_field :sender_id, value: current_user.id %>
 <%= f.hidden_field :recipient_id, value: @item.owner.id %>
 <%= f.hidden_field :item_id, value: @item.id %>
 <%= f.hidden_field :asking_price, value: @item.price %>
 <%= f.text_field :amount %>
 <%= f.text_field :name %>
 <%= f.text_field :street %>
 <%= f.text_field :street_2 %>
 <%= f.text_field :state %>
 <%= f.text_field :zip_code %>
 <%= f.text_field :phone_number %>
 <%= f.check_box :agreement %>
 <%= f.submit "submit" %>
<% end %>

Это выглядит более или менее точно так же, как код в сообщении в блоге, но по какой-то причине он ожидает 0 аргументов,Почему это?

Ответы [ 2 ]

1 голос
/ 23 марта 2019

params.permit! белый список всех атрибутов -> Rails разрешают!

Вы должны использовать permit

0 голосов
/ 23 марта 2019

Вам нужно использовать permit вместо permit!. Первый принимает аргументы. Последний не.

...