我有一個應用程序,其中我有user
,request
和proposal
模型。他們的結構是這樣的。一個user
有許多proposals
和requests
:Rails 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
屬於user
和request
。無論user
的request
屬於也要有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 %>
)在proposal
的request
的project_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
任何人看到我要去哪裏錯了嗎?
我認爲這將是另一種方式(提案屬於請求)。這將如何改變我的路由鏈接(例如鏈接到一個新的提議)? – Liz
謝謝,我會在今晚進行更新 – MZaragoza
並告訴提案屬於請求 – MZaragoza