可以找到没有ID的Addict

时间:2014-06-02 17:57:46

标签: ruby-on-rails variables controller

我正在尝试在我的主页中添加一个在模式中创建新“Addicts”的新表单。

这是一个带有2个输入的简单表单,当点击New时,会在我的索引页面中弹出一个带有该表单的模式。

我无法让它发挥作用,因为它一直说“无法找到没有身份证的瘾君子”。

我的页面控制器

class PagesController < ApplicationController

    def home
    @addict = Addict.find(params[:id])
    @lanzaderas = Lanzadera.all
    render 'index'
    end

end

我的瘾君子控制器

class AddictsController < ApplicationController
   def index
        @posts = Addict.all
    end

    def show
        @addict = Addict.find(params[:id])
    end

    def new
        @addict = Addict.new(params[:addict])
    end

    def create
        @addict = Addict.new(params[:addict])

        if @addict.save
            redirect_to posts_path,  :notice => "Your Addict was saved"
        else
            render "new"
        end
    end

    def edit

    end

    def update

    end

    def destroy

    end
end
end

我的模式中的表单

  <%= form_for @addict do |f| %>
      <%= f.input :name %>
      <%= f.input :surname %>
      <%= f.input :postal %>
      <%= f.submit %>
  <% end %>

我知道它与我的控制器中没有正确传递的变量/ id有关,但这是一个错误我很多次并且不知道为什么我会发生。

谢谢!

1 个答案:

答案 0 :(得分:0)

PagesController def home中,您有以下代码:

@addict = Addict.find(params[:id])

我怀疑,当您访问主页时,您的参数中没有“addict”的ID。

您想在“主页”页面中显示一个特定的瘾君子吗?如果没有,您可以删除此行。

<强>更新

在AddictsController中更改此内容:

def new
    @addict = Addict.new
end

在新动作中,您只需“准备”一个新的上瘾者对象。由于尚未创建记录,因此无法使用find方法。

如果你正在使用Rails 4,你还必须允许你的参数(出于安全原因;更多信息在这里:Railsguides: Strong Parameters

在你的情况下,你必须做两件事:

首先:在AddictsController底部添加:

private

def addict_params
  params.require(:addict).permit(:name, :surname, :postal)
end

第二:在您的创建操作中使用此方法而不是params[:addict]

def create
  @addict = Addict.new(addict_params)

  if @addict.save
    redirect_to posts_path,  :notice => "Your Addict was saved"
  else
    render "new"
  end
end