Search code examples
ruby-on-railsruby-on-rails-4form-forfriendly-id

Rails 4 LocalJumpError for nested recourse form


I have a nested recourse called "transactions" inside another recourse "budgets".

All I'm trying to accomplish is for my users to be able to edit individual "transactions". However when I go to /1/transactions/1/edit I get a LocalJumpError saying "no block given (yield)". There might be a very simple solution to this but I haven't been able to find it yet.

routes.rb:

resources :budgets, :path => '/' do
  resources :transactions
end

budget.rb:

class Budget < ActiveRecord::Base
  belongs_to :user
  has_many :transactions

  validates :amount, presence: true
  validates :title, presence: true
  validates :user, presence: true
  validates :amount, numericality: true

  extend FriendlyId
  friendly_id :title, use: :slugged

  def should_generate_new_friendly_id?
    new_record?
  end
end

transaction.rb

class Transaction < ActiveRecord::Base
  belongs_to :user
  belongs_to :budget

  validates :amount, presence: true
  validates :user, presence: true
  validates :budget, presence: true
  validates :date, presence: true
  validates :amount, numericality: true
  validates :is_positive, :inclusion => {:in => [true, false]}
end

transactions_controller.rb

  def edit
    @budget = Budget.friendly.find(params[:budget_id])
    @transaction = @budget.transaction
  end

And in the view transactions/edit.html.erb:

<%= form_for(@transaction) do |f| %>

What am I missing?


Solution

  • Naming a model Transaction conflicts with ActiveRecord::Transactions. You'll need to rename your model.

    http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html