【问题标题】:Undefined variable error when rendering partial on rails在轨道上渲染部分时出现未定义的变量错误
【发布时间】:2016-02-26 21:41:01
【问题描述】:

我正在尝试将渲染代码放入我的 edit.html.erb 并创建 _form.html.erb。 我有这些用于 edit.html.erb 的代码

    <h1>Main#edit</h1>
    <h1>Editing zone</h1>
    <%= render partial: "form", locals: {addresses: @addresses} %>

以及 _form.html.erb 的这些代码

    <%= form_for(addresses)do |f| %>
  <p>
  <b>name</b><br>
  <%= f.text_field :address %>
  </p>
  <p>
  <%= f.submit %>
  </p>
  <% end %>

而addresses是一组地址。

我有这个错误: 找不到带有 'id'= 的地址 提取的源代码(第 21 行附近):

  def edit
 @address = Address.find(params[:id])  this is 21th line
  if request.post?
  if (@address.update_attributes(address_params))
  redirect_to :action=>"index"

您能帮我检查一下我的代码有什么问题吗?

这是我的控制器的代码:

    class MainController < ApplicationController
    def index
    @addresses = Address.all
    end

    def new

    end

    def add
    address = Address.new(address_params)
    if (address.save)
    redirect_to :action=>"index"
    else
     flash[:notice]="Error saving, try again"
     redirect_to :action=>"index"
     end
    end

    def edit
    @address = Address.find(params[:id])
    if request.post?
    if (@address.update_attributes(address_params))
    redirect_to :action=>"index"
    else
    render :action=>"edit"
        end
      end
    end

    def delete
    address = Address.find(params[:id])
    address.destroy
    redirect_to :action=>"index"
    end

    private
    def address_params
    params.require(:address).permit(:name,:address,:email,:phone)
    end
    end

这是我的模型: my data structure

【问题讨论】:

  • 原码在github.com/siddharthkaza/addressbook_rails42.git。不好意思,不是未定义变量的错误,我也想知道_form是怎么调用edit函数的。我不明白,如果我需要传递 id 值,我在哪里指定?
  • 我不知道部分渲染在 Rails 中是如何工作的。我认为问题可能是因为我忘记了将 id 值传递给编辑函数,或者我的地址以某种方式未被读取(我确定地址 [1] 和更多不是空的)。
  • (1) 您应该多花 一点 时间来格式化您的代码,(2) 您应该发布特定的堆栈跟踪。
  • 对不起,我也对此感到困惑..我不知道踪迹,所以我很困惑。这是一个常见的样本。在新视图和编辑视图中都进行了部分渲染,但我不知道它是如何工作的。

标签: ruby-on-rails render partial


【解决方案1】:

我需要查看更多您的控制器代码,但看起来 Rails 正在尝试在此处查找与 params 中的 id 匹配的地址:

 def edit
   @address = Address.find(params[:id])

您似乎有一个路由设置来处理此编辑操作:

get 'resource/:id', to: 'ResourceController#edit'

当您尝试在浏览器中访问“/resource/1”(或任何您的网址)时,它应该会找到该地址(假设您的数据库中有一个 id=1 的地址)

【讨论】:

  • 我添加了更多信息,请您再检查一下吗?这里的地址只是一个属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 2016-11-21
相关资源
最近更新 更多