【发布时间】:2014-07-26 02:31:54
【问题描述】:
我创建了 2 个脚手架“mepager”和“pimp”,并像这样链接模型:
class Mepager < ActiveRecord::Base
belongs_to :pimp
end
class Pimp < ActiveRecord::Base
has_one :mepager
end
我在路由中添加了以下几行:
resources :pimps do
resources :mepagers
end
我的 mepager 创建操作如下所示:
def create
@mepager = @pimp.build_mepager(mepager_params)
respond_to do |format|
if @mepager.save
format.html { redirect_to @mepager, notice: 'Mepager was successfully created.' }
format.json { render action: 'show', status: :created, location: @mepager }
else
format.html { render action: 'new' }
format.json { render json: @mepager.errors, status: :unprocessable_entity }
end
end
end
然后设置@pimp
def setPimp
@pimp = Pimp.find_by_id(:pimp_id)
end
但如果我尝试在 pimps/1/mepagers/new 创建一个新的 mepager,我会收到未定义的方法 build_mepager 错误。
undefined method `build_mepager' for nil:NilClass
我在 Rails 控制台中尝试了相同的方法,并且仅使用该方法。所以我想仍然缺少一些东西让它在我的网络应用程序上运行。
顺便说一句,我正在使用 rails 4.0.0
问候!
路由
Prefix Verb URI Pattern Controller#Action pimps GET /pimps(.:format) pimps#index POST /pimps(.:format) pimps#create new_pimp GET /pimps/new(.:format) pimps#new edit_pimp GET /pimps/:id/edit(.:format) pimps#edit pimp GET /pimps/:id(.:format) pimps#show PATCH /pimps/:id(.:format) pimps#update PUT /pimps/:id(.:format) pimps#update DELETE /pimps/:id(.:format) pimps#destroy root GET / pimps#index pimp_mepagers GET /pimps/:pimp_id/mepagers(.:format) mepagers#index POST /pimps/:pimp_id/mepagers(.:format) mepagers#create new_pimp_mepager GET /pimps/:pimp_id/mepagers/new(.:format) mepagers#new edit_pimp_mepager GET /pimps/:pimp_id/mepagers/:id/edit(.:format) mepagers#edit pimp_mepager GET /pimps/:pimp_id/mepagers/:id(.:format) mepagers#show PATCH /pimps/:pimp_id/mepagers/:id(.:format) mepagers#update PUT /pimps/:pimp_id/mepagers/:id(.:format) mepagers#update DELETE /pimps/:pimp_id/mepagers/:id(.:format) mepagers#destroy GET /pimps(.:format) pimps#index POST /pimps(.:format) pimps#create GET /pimps/new(.:format) pimps#new GET /pimps/:id/edit(.:format) pimps#edit GET /pimps/:id(.:format) pimps#show PATCH /pimps/:id(.:format) pimps#update PUT /pimps/:id(.:format) pimps#update DELETE /pimps/:id(.:format) pimps#destroy
皮条客控制器中的更改线路
def create
@pimp = Pimp.new(pimp_params)
respond_to do |format|
if @pimp.save
format.html { redirect_to new_pimp_mepager_path, notice: 'Product Improvement was successfully created.' }
format.json { render action: 'show', status: :created, location: @pimp }
else
format.html { render action: 'new' }
format.json { render json: @pimp.errors, status: :unprocessable_entity }
end
end
end
网页控制器
class MepagersController < ApplicationController
before_action :set_mepager, only: [:show, :edit, :update, :destroy]
def setPimp
@pimp = Pimp.find(params[:pimp_id])
end
# GET /mepagers
# GET /mepagers.json
def index
@mepagers = Mepager.all
end
# GET /mepagers/1
# GET /mepagers/1.json
def show
end
# GET /mepagers/new
def new
@mepager = Mepager.new
end
# GET /mepagers/1/edit
def edit
end
# POST /mepagers
# POST /mepagers.json
def create
raise params[:pimp_id].inspect
@mepager = @pimp.build_mepager(mepager_params)
respond_to do |format|
if @mepager.save
format.html { redirect_to @mepager, notice: 'Mepager was successfully created.' }
format.json { render action: 'show', status: :created, location: @mepager }
else
format.html { render action: 'new' }
format.json { render json: @mepager.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /mepagers/1
# PATCH/PUT /mepagers/1.json
def update
respond_to do |format|
if @mepager.update(mepager_params)
format.html { redirect_to @mepager, notice: 'Mepager was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @mepager.errors, status: :unprocessable_entity }
end
end
end
# DELETE /mepagers/1
# DELETE /mepagers/1.json
def destroy
@mepager.destroy
respond_to do |format|
format.html { redirect_to mepagers_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_mepager
@mepager = Mepager.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def mepager_params
params.require(:mepager).permit(:pre, :post, :comment, :save_h, :save_c, :save_other, :save_otherv, :affect_design, :affect_stress, :affect_me, :affect_other, :affect_dno, :affect_mid, :affect_otherdoc, :owner, :pps, :reference)
end
end
【问题讨论】:
-
你能粘贴确切的错误吗?
@pimp定义了吗? -
您是如何构建表单的?能否请您更新您的表单代码!
-
嘿,你搞定了吗?如果是这样 - 我的回答有帮助吗?如果是这样-“接受”答案通常是一种很好的形式。您可以通过将鼠标悬停在答案上来做到这一点......左侧会出现一个“勾号”标记。单击该勾号,使其变为绿色,您已接受答案。干杯!
-
抱歉,忘记了。非常感谢您的帮助!欣赏!
标签: ruby-on-rails methods associations one-to-one