There are three models
class Profile < ActiveRecord::Base belongs_to :user has_many :project_lists has_many :projects, through: :project_lists end class Project < ActiveRecord::Base has_many :project_lists has_many :profiles, through: :project_lists has_many :charts end class ProjectList < ActiveRecord::Base belongs_to :profile belongs_to :project end The essence of the problem, you need to add the project to the user profile page. For example: the user enters the project page, and the add button adds a project that he liked to the page.
Communication works, through the console I add I delete projects.
I tried different solutions from the forum but did not work for me ... On flights I am still a novice and I can’t figure out how to implement this functionality.
class ProjectsController < ApplicationController before_action :find_project, only: [:show, :edit, :update, :destroy, :add] def index @projects = Project.all.paginate(page: params[:page], per_page: 5) end def new @project = Project.new end def edit end def update if @project.update(project_params) redirect_to projects_path else render 'edit' end end def create @project = Project.new(project_params) #@project.profiles.build(params[:profile_id]) if @project.save flash[:create] = 'Project created' redirect_to projects_path else render 'new' end end def show end def destroy @project.destroy flash[:destroy] = 'Delete project' redirect_to projects_path end private def project_params params.require(:project).permit(:project_name, :project_id, :description) end def find_project @project = Project.find(params[:id]) end end class ProfilesController < ApplicationController #before_action :authenticate_user!, except: [:index] before_action :find_profile, only: [ :show, :edit, :update, :destroy] def index @profiles = Profile.all.paginate(page: params[:page], per_page: 5) end def show end def new @profile = Profile.new end def edit end def create end def update respond_to do |format| if @profile.update(profile_params) format.json { head :no_content } format.js format.html do redirect_to '/' end else format.json { render json: @profile.errors.full_messages, status: :unprocessable_entity } end end end def destroy @profile.destroy respond_to do |format| format.js format.html { redirect_to profiles_url } format.json { head :no_content } end end private def profile_params params.require(:profile).permit(:name, :birthday, :biography, :user_id, :avatar) end def find_profile @profile = Profile.find(params[:id]) end end I tried this:
def add @profile = Profile.find(profile_params) @profile.projects << Project.find(params[:project_id]) end and in the routes
get '/projects/:project_id', to: 'profiles#add', as: 'add' It turns out like this:
Started GET "/projects/3" for 127.0.0.1 at 2017-02-09 12:23:17 +0200 ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations".* FROM "schema_migrations" Processing by ProjectsController#show as JS Parameters: {"id"=>"3"} Project Load (0.2ms) SELECT "projects".* FROM "projects" WHERE "projects"."id" = ? LIMIT 1 [["id", 3]] Rendered projects/show.html.erb within layouts/application (4.0ms) User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 19]] Completed 200 OK in 321ms (Views: 294.7ms | ActiveRecord: 1.0ms)
GET "/projects/3"akaprojects#show id=3. - D-side