I have a model Station
class Station < ApplicationRecord
validates :name, presence: true
has_many :ways
has_many :routes, through: :ways
has_and_belongs_to_many :tickets
def update_index_number(route, index_number)
way = way(route)
way.update(index_number: index_number) if way
end
def index_number_in(route)
way(route).try(:index_number)
end
protected
def way(route)
@way ||= ways.where(route: route).first
end
end
, Route
model
class Route < ApplicationRecord
validates :name, presence: true
has_many :trains
has_many :ways
has_many :stations, through: :ways
end
and Way
class Way < ApplicationRecord
belongs_to :station
belongs_to :route
end
All migrations:
class CreateStations < ActiveRecord::Migration[5.2]
def change
create_table :stations do |t|
t.string :name
end
end
end
class CreateRoutes < ActiveRecord::Migration[5.2]
def change
create_table :routes do |t|
t.string :name
end
end
end
class WayJoinTable < ActiveRecord::Migration[5.2]
def change
create_table :ways, id: false do |t|
t.belongs_to :station, index: true
t.belongs_to :route, index: true
t.integer :index_number, default: 10, null: false
end
end
end
But I can NOT write the :index_number
!!
I also have this in routes:
resources :stations do
patch :update_index_number, on: :member
end
This in station_controller
:
def update_index_number
@station = Station.find(params[:id])
@route = Route.find(params[:route_id])
@station.update_index_number(@route, params[:index_number])
redirect_to @route
end
I get error:
ActiveRecord::StatementInvalid in StationsController#update_index_number
SQLite3::SQLException: no such column: ways.: UPDATE "ways" SET "index_number" = ? WHERE "ways"."" IS NULL
Extracted source (around line #12):
10 def update_index_number(route, index_number)
11 way = way(route)
12 way.update(index_number: index_number) if way
13 end
Please help somebody!
I belive in Rails and Community!