Я использую это для построения модели формы (я хочу создать 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 аргументов,Почему это?