Добавить в избранное кнопку ruby на рельсах - PullRequest
0 голосов
/ 06 мая 2020

Итак, я хочу добавить любимую кнопку в моем представлении о стажировке, но получаю эту ошибку: {: 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"]}'.

Итак, если у вас есть совет по этому поводу, как мне это делать. Кнопка - хорошая идея, или лучше сделать иначе?

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Проблема решена! Я не помещал этот код:

@favorite.favorite_internship_id = @internship.id

В правом контроллере он должен быть в избранном контроллере, в def #create, извините, я новичок, в любом случае он woooooorks !!!

Кроме того, у меня был лучший совет, который касался этого с любимыми параметрами (в любимом контроллере #create):

@favorite = Favorite.new(favorite_internship_id: params[:internship_id], favorite_user_id: current_user.id)

Я удалил вторую строку, она отлично работает!

0 голосов
/ 06 мая 2020

у вас есть любимая_продолжительная модель? если да, то вам нужно добавить в свою модель, которая принадлежит фавориту

belongs_to :favorite, optional: true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...