2017-03-19 88 views
0

我正在創建一個應用程序,您可以在其中查看世界上所有的會議。Ruby on Rails ||向用戶添加會議

我有什麼:

  • 創建會議
  • 顯示所有會議

現在我想創建是一個按鈕,它可以讓我的會議添加到用戶。

什麼我想用這個來完成:

  • 加入會議的用戶
  • 顯示加入會議在列表
  • 觀看會議和添加內容

我在想的一個按鈕,用於複製所選對象的屬性並將其添加到選定用戶以供將來操作和查看會議

我問,如果有人能告訴我如何做到這一點

https://consulegem-salman15.c9users.io/conferences

遷移會議

class CreateConferences < ActiveRecord::Migration[5.0] 
    def change 
    create_table :conferences do |t| 

     t.string :conference 
     t.string :country 
     t.string :month 
     t.string :presence 
     t.string :audience 
     t.integer :cost 
     t.text :content 

     t.references :user, foreign_key: true 

     t.timestamps 
    end 
    add_index :conferences, [:user_id, :created_at] 
    end 
end 

控制器發佈會

class ConferencesController < ApplicationController 
    before_action :logged_in_user, only: [:create, :destroy] 
    before_action :correct_user, only: :destroy 
    before_action :admin_user,  only: :destroy 
    def index 

     @conferences = Conference.paginate(page: params[:page]) 

     if params[:search] 
     @conferences = Conference.search(params[:search]).order("created_at DESC").paginate(page: params[:page]) 
     else 
     @conferences = Conference.all.order('created_at DESC').paginate(page: params[:page]) 
     end 
    end 

    def new 
    @user = User.new 
    @conference = Conference.new 
    end 

    def create 

    @conference = current_user.conferences.build(conference_params) 
    if @conference.save 
     flash[:success] = "conference created!" 
     redirect_to conferences_path 
    else 
     @feed_items = current_user.feed.paginate(page: params[:page]) 
     render 'new' 
    end 
    end 


    def destroy 
    @conference.destroy 
    flash[:success] = "conference deleted" 
    redirect_to request.referrer || root_url 
    end 


    private 

    def conference_params 
     params.require(:conference).permit(:conference,:country , :month, :presence, :audience, :cost ,:picture) 
    end 

    # Confirms an admin user. 
    def admin_user 
     redirect_to(root_url) unless current_user.admin? 
    end 

    def correct_user 
     @conference = current_user.conferences.find_by(id: params[:id]) 
     redirect_to root_url if @conference.nil? 
    end 

end 

模型控制器

class Conference < ApplicationRecord 
    belongs_to:user 
     default_scope -> { order(created_at: :desc) } 
     mount_uploader :picture, PictureUploader 
     validates :user_id, presence: true 
     validates :conference, presence: true, length: { maximum: 140 } 
     validate :picture_size 
     scope :conference, -> (conference) { where conference: conference } 

     def self.search(search) 
     where("conference LIKE ? OR country LIKE ? OR month LIKE ?", "%#{search}%", "%#{search}%", "%#{search}%") 

     end 


     private 

     # Validates the size of an uploaded picture. 
     def picture_size 
      if picture.size > 5.megabytes 
      errors.add(:picture, "should be less than 5MB") 
      end 
     end 
end 

回答

0

我發現回答是通過添加嵌套在ConferenceController一個SubscriptionsController和RelationshipController

SubscriptionController

class SubscriptionsController < ApplicationController 
    before_action :set_conference, only: :create 

    def index 
    @subscriptions = current_user.subscriptions 
    @subscriptions = Subscription.paginate(page: params[:page]) 
    end 

    def show 
    @subscription = Subscription.find_by(id: params[:id]) 

    end 

    def create 
    if current_user.subscriptions.create(conference: @conference) 
     flash[:success] = "You are now subscribed to { @conference.conference }" 
    else 
     flash[:error] = "Could not create subscription." 
    end 
    redirect_to conferences_path 
    end 

    def destroy 
    @subscription = current_user.subscriptions.find(params[:id]) 
    if @subscription.destroy 
     flash[:success] = "You are no longer subscribed to { @conference.conference }" 
    else 
     flash[:error] = "Oh noes" 
    end 

    redirect_to conferences_path 
    end 

    def set_conference 
    @conference = Conference.find_by id: params["conference_id"] 
    end 
end 

RelationshipController

class RelationshipsController < ApplicationController 
    before_action :logged_in_user 

    def create 
    @conference = Conference.find(params[:followed_id]) 
    current_user.follow(@conference) 
    respond_to do |format| 
     format.html { redirect_to @conference } 
     format.js 
    end 
    end 

    def destroy 
    @user = Relationship.find(params[:id]).followed 
    current_user.unfollow(@user) 
    respond_to do |format| 
     format.html { redirect_to @user } 
     format.js 
    end 
    end 
end 

ConferenceController

class ConferencesController < ApplicationController 
    before_action :logged_in_user, only: [:create, :destroy] 
    before_action :correct_user, only: :destroy 
    before_action :admin_user,  only: :destroy 

    def index 
     @conferences = Conference.paginate(page: params[:page]) 


     if params[:search] 
     @conferences = Conference.search(params[:search]).order("created_at DESC").paginate(page: params[:page]) 
     else 
     @conferences = Conference.all.order('created_at DESC').paginate(page: params[:page]) 
     end 
    end 

    def show 

     @conference = Conference.find(params[:id]) 

    end 

    def new 
    @user = User.new 
    @conference = Conference.new 
    end 

    def create 

    @conference = Conference.new(conference_params) 
    @conference.user = current_user 
    if @conference.save 
     flash[:success] = "conference created!" 
     redirect_to conferences_path 
    else 
     @feed_items = current_user.feed.paginate(page: params[:page]) 
     render 'new' 
    end 
    end 

    def destroy 
    @conference.destroy 
    flash[:success] = "conference deleted" 
    redirect_to request.referrer || root_url 
    end 


    private 

    def conference_params 
     params.require(:conference).permit(:conference,:country , :month, :presence, :audience, :cost ,:picture) 
    end 

    # Confirms an admin user. 
    def admin_user 
     redirect_to(root_url) unless current_user.admin? 
    end 

    def correct_user 
     @conference = current_user.conferences.find_by(id: params[:id]) 
     redirect_to root_url if @conference.nil? 
    end 

end