Итак, я хочу добавить любимую кнопку в моем представлении о стажировке, но получаю эту ошибку: {: favourite_internship => ["must exist"]}
Я не знаю, как сказать рельсы, что идентификатор стажировки по представлению шоу - это имя_фаворита
Я пробовал это в контроллере стажировки, но он не работает
@favorite.favorite_internship_id = @ internship.id
Во-первых, таблица Favorite, Internship имеет имя class_name 'favour_internship', а User - имя class_favour_user '
create_table "favorites", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.bigint "favorite_user_id"
t.bigint "favorite_internship_id"
t.index ["favorite_internship_id"], name: "index_favorites_on_favorite_internship_id"
t.index ["favorite_user_id"], name: "index_favorites_on_favorite_user_id"
end
Любимая модель
class Favorite < ApplicationRecord
belongs_to :favorite_user, class_name: "User"
belongs_to :favorite_internship, class_name: "Internship"
end
Модель стажировки
class Internship < ApplicationRecord
has_many :favorites, foreign_key: "favorite_internship_id"
has_many :favorite_users, foreign_key: "favorite_user_id", class_name: "User", through: :favorites
end
Любимый контроллер
class FavoritesController < ApplicationController
def new
@favorite = Favorite.new
end
def create
@favorite = Favorite.new(favorite_internship_id: params[:favorite_internship_id], favorite_user_id: params[:favorite_user_id])
@favorite.favorite_user = current_user
respond_to do |format|
if @favorite.save
format.html { redirect_back fallback_location: root_path, notice: 'Favorite was successfully created.' }
format.json { render :show, status: :created, location: @favorite }
else
format.html { redirect_back fallback_location: root_path, notice: "Le favoris n'a pas pu être créé : #{@favorite.errors.messages}" }
format.json { render json: @favorite.errors, status: :unprocessable_entity }
end
end
end
end
Итак, любимая кнопка находится в стажировке на шоу. Вот контроллер стажировки:
class InternshipsController < ApplicationController
def show
@reviews_of_internship = @internship.reviews.order(created_at: :desc).paginate(page: params[:page], per_page: 4)
@review = Review.new
@favorite = Favorite.new
@favorite.favorite_internship_id = @internship.id
end
end
Маршруты
resources :favorites
resources :internships do
resources :reviews, only: [:new, :create, :edit, :update, :destroy]
resources :favorites, only: [:new, :create, :destroy]
end
Создать избранный маршрут:
internship_favorites POST /internships/:internship_id/favorites(.:format) favorites#create
У меня есть кнопка «Избранное» в представлении щелкните, чтобы предпочтение было отдано стажировке
<%= button_to "Favorite", internship_favorites_path(@internship), method: :post %>
Здесь я получаю сообщение об ошибке '{: favour_internship => ["must exists"]}'.
Итак, если у вас есть совет по этому поводу, как мне это делать. Кнопка - хорошая идея, или лучше сделать иначе?