我正在尝试在我的主页中添加一个在模式中创建新“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有关,但这是一个错误我很多次并且不知道为什么我会发生。
谢谢!
答案 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