Я пытаюсь сделать URL-адрес похожим на это "..teaclasses /: id / teas /: id";поэтому в teas_controller.rb я помещаю before_filter: get_teaClass
Это имеет значение только в том случае, если вы пытаетесь настроить вложенные маршруты, но id не звучит так, как будто вы это делаете.
Что вам нужно сделать, это на самом деле добавить внешний идентификатор в базу данных.Поэтому проверьте schema.rb
и убедитесь, что столбец существует.
Вот что вам нужно сделать.
- Убедитесь, что в таблице базы данных действительно есть иностранец
tea
. - Если вы перейдете кследующий шаг, где я покажу вам лучший способ написания вашего кода.
- Если у вас нет 'tea_class_id' в качестве целочисленного значения в вашей таблице 'чай', вам нужно добавить его.
- скрипт / генерация миграции add_tea_class_id_to_tea
- rake db: migrate
- Теперь вот как должен быть написан ваш код
rout.rb
map.resources :teas
map.resources :teas_classes
Модели
модели / tea.rb
class Tea < ActiveRecord::Base
belongs_to :tea_class
end
tea_class.rb
class TeaClass < ActiveRecord::Base
has_many :teas
end
контроллеры
teas_controller.rb
def new
@tea = Tea.new
end
def show
@tea = tea.find(params[:id)
end
def create
@tea = Tea.new(params[:tea])
if @tea.save
redirect_to teas_path
else
render :action => 'new'
end
end
просмотров
Это действительно важно.Убедитесь, что вы передаете: tea_class_id в качестве параметра при создании чая, иначе он не знает, как создать ассоциацию.Это своего рода за сценой, потому что вы отправляете params[:tea]
, но именно в тех параметрах, куда на самом деле отправляется tea_class_id
.
Так что ... по вашему мнению, у вас должен быть какой-то способ для пользователейвыберите категорию или, как у вас, чайный класс, и это обычно делается с помощью поля выбора, когда это ассоциация один ко многим.
new.html.erb
<% form_for(@tea) do |t| %>
<%= t.collection_select :tea_class_id TeaClass.all, :id, :name %>
<% end %>
Убедитесь, чтоу вас есть классы чая, чтобы заполнить метод collection_select
.Google, что плюс rails api, если вы не понимаете, что происходит.
Вложенные маршруты (на стороне)
Похоже, вы пытались получить маршруты вроде teaclasses/:id/teas/:id
.Это называется вложенной маршрутизацией, и вы захотите настроить ее в вашем маршруте. Rb
map.resources :tea_classes_ do |tea_classes|
tea_classes :teas
end
map.resources :teas
Затем вы можете установить ссылку на teas_classes/pour/teas/chinese
.Вы должны знать эту команду rake routes
.Это поможет вам понять, как работают пути.
Но если вы просто хотите, чтобы ссылка начала работать, она должна выглядеть следующим образом:
<%= link_to "Teas", tea_classes_teas_path(@tea_class)%>
Вам необходимо указать @teas
, чтобы сделатьссылка, потому что она берет идентификатор от этого, и когда вы щелкаете, она передает его teas_controller' as
params [: teas_class_id] `.Вам не нужно ничего делать без.Это будет автоматически в URL.