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) 
  • And what solutions have you tried? I do not see a single question. - D-side
  • @ D-side Tried to do this by 'def add profile = Profile.find (profile_params) profile.projects << Project.find (params [: project_id]) end' - Jhonson
  • And-and-and what happened? - D-side
  • @ D-side updated post added logs) - Jhonson
  • These are logs from GET "/projects/3" aka projects#show id=3 . - D-side

0