2016-12-16 51 views
0

我有一個應用程序,其中我有user,requestproposal模型。他們的結構是這樣的。一個user有許多proposalsrequestsRails has_many/belongs_to不工作

class User < ActiveRecord::Base 
    has_many :requests 
    has_many :proposals 
end 

一個request屬於user,有許多proposals

class Request < ActiveRecord::Base 
    belongs_to :user 
    has_many :proposals 
end 

一個proposal屬於userrequest。無論userrequest屬於也要有proposal

class Proposal < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :request 
end 

我有它在建立這樣我schema.rb

create_table "proposals", force: :cascade do |t| 
    t.integer "user_id" 
    t.integer "request_id" 
    ... 
    t.string "status",    default: "Proposal Created" 
    t.datetime "created_at",          null: false 
    t.datetime "updated_at",          null: false 
    end 

    add_index "proposals", ["request_id"], name: "index_proposals_on_request_id" 
    add_index "proposals", ["user_id"], name: "index_proposals_on_user_id" 

    create_table "requests", force: :cascade do |t| 
    t.string "project_title" 
    ... 
    t.integer "user_id" 
    end 

    add_index "requests", ["user_id"], name: "index_requests_on_user_id" 

我有我設置的一個proposal#new/proposal#edit視圖形式:request使用hidden_field

<%= f.hidden_field :request, value: @request %> 

然後,當我試圖調用具有proposal#show頁面(<%= @proposal.request.project_title %>)在proposalrequestproject_title它出來爲nil

任何人都可以幫助我重組的東西,讓這個工作正確嗎?我試圖做的唯一複雜的事情是,在this blog後面,我試圖獲取點擊鏈接的request的值。這裏是我的proposals_controller

class ProposalsController < ApplicationController 
    before_action :set_proposal, only: [:show, :edit, :update, :destroy] 

    # GET /proposals 
    def index 
    @proposals = Proposal.all 
    end 

    # GET /proposals/1 
    def show 
    end 

    # GET /proposals/new 
    def new 
    @request = Request.find(params[:request_id]) 
    @proposal = Proposal.new 
    end 

    # GET /proposals/1/edit 
    def edit 
    @request = Request.find(params[:request_id]) 
    @proposal = Proposal.find(params[:id]) 
    end 

    # POST /proposals 
    def create 
    @request = Request.find(params[:request_id]) 
    @proposal = @request.proposals.new 
    @proposal.user = @request.user 

    if @proposal.save 
     redirect_to request_proposal_path(@request, @proposal), notice: 'Proposal was successfully created.' 
    else 
     render :new 
    end 
    end 

    # PATCH/PUT /proposals/1 
    def update 
    if @proposal.update(proposal_params) 
     redirect_to @proposal, notice: 'Proposal was successfully updated.' 
    else 
     render :edit 
    end 
    end 

    # DELETE /proposals/1 
    def destroy 
    @proposal.destroy 
    redirect_to proposals_url, notice: 'Proposal was successfully destroyed.' 
    end 

    def unarchive 
    @proposal = Proposal.find(params[:id]) 
    if @proposal.update_attributes(status: "Sent to Client") 
     FavoriteMailer.send_proposal_to_client(@proposal, @proposal.user).deliver_now 
     flash[:notice] = "That proposal has sent to the client." 
     redirect_to :back 
    else 
     flash[:alert] = "That proposal could not be sent right now." 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_proposal 
     @proposal = Proposal.find(params[:id]) 
    end 

    # Only allow a trusted parameter "white list" through. 
    def proposal_params 
     params.require(:proposal).permit(:user_id, :request_id, :executive_summary, :situation_analysis, :strategy_online, :strategy_real_world, :strategy_credentials, :strategy_timeline, :respond_by, :timetable, :financials, :conditions, :acceptance, :status) 
    end 
end 

這裏是我的路線:

get 'proposal/:request', to: 'proposals#new', as: 'new_proposal' 
resources :proposals 

任何人看到我要去哪裏錯了嗎?

回答

1

有你嘗試做這樣的事情在你的路由

resources:requests do 
    resources :proposals 
    end 

響應

    request_proposals GET  /requests/:request_id/proposals(.:format)          proposals#index 
            POST  /requests/:request_id/proposals(.:format)          proposals#create 
       new_request_proposal GET  /requests/:request_id/proposals/new(.:format)         proposals#new 
       edit_request_proposal GET  /requests/:request_id/proposals/:id/edit(.:format)        proposals#edit 
        request_proposal GET  /requests/:request_id/proposals/:id(.:format)         proposals#show 
            PATCH  /requests/:request_id/proposals/:id(.:format)         proposals#update 
            PUT  /requests/:request_id/proposals/:id(.:format)         proposals#update 
            DELETE  /requests/:request_id/proposals/:id(.:format)         proposals#destroy 
          requests GET  /requests(.:format)                requests#index 
            POST  /requests(.:format)                requests#create 
         new_request GET  /requests/new(.:format)               requests#new 
         edit_request GET  /requests/:id/edit(.:format)              requests#edit 
          request GET  /requests/:id(.:format)               requests#show 
            PATCH  /requests/:id(.:format)               requests#update 
            PUT  /requests/:id(.:format)               requests#update 
            DELETE  /requests/:id(.:format)               requests#destroy 

作出新的建議,你會怎麼做:new_request_proposal_path(@request)

+0

我認爲這將是另一種方式(提案屬於請求)。這將如何改變我的路由鏈接(例如鏈接到一個新的提議)? – Liz

+0

謝謝,我會在今晚進行更新 – MZaragoza

+0

並告訴提案屬於請求 – MZaragoza