【问题标题】:NoMethodError in Characters#new字符中的 NoMethodError#new
【发布时间】:2013-05-03 12:08:01
【问题描述】:

我是 Rails 新手。我正在创建一个 Rails 项目,其中 Product 和 Character 是模型。我有以下问题。

第一季度。两个模型之间给定的关联是否正确?

class Product < ActiveRecord::Base

has_many :characters

end


class Character < ActiveRecord::Base

belongs_to :product

end

第二季度。我创建了一个链接以在产品的“显示”页面中添加新字符,例如,如果我们单击添加新字符,它应该显示一个“新”字符页面,其中我应该有一个字符名称下拉列表(即高度,宽度、重量和颜色),但事实并非如此。

它显示NoMethodError in Characters#new 错误。

我的字符/新文件的下一行出现错误。

 collection_select(:product, :c_id, @character, :id, :name) 

注意:在迁移之前,我已经在字符中创建了 name 属性的值,例如高度、重量、宽度、颜色。

第三季度。如果可行(即 Q2),我想在“产品展示页面”中显示角色名称和值。为此,我如何重定向到产品“展示”页面..?

用于新建、显示和创建的角色控制器:

def show

@product = Product.find(params[:id])

  @character = Character.find(params[:id])

end



def new

 @character = Character.new(params[:character])

 @product = Product.find(params[:id])

end


def create

  @character = Character.new(params[:character])


    if @character.save

 redirect_to :action => 'show', :id => @product.id

else

render :action => 'new'

end

end

现在,在 characters/new 中输入字符的值并单击创建按钮后,它会引发以下错误

ActiveRecord::RecordNotFound in ProductsController#show 
     Couldn't find Product without an ID

我想在产品/节目中显示角色名称和价值。上面的错误阻止了我这样做..

我在 productscontroller 中的显示方法:

def show

@product = Product.find(params[:id])

@character = Character.find(:all)

end

【问题讨论】:

  • 您能否分享您的character_controller 用于newcreateshow 的操作?

标签: ruby-on-rails associations controllers


【解决方案1】:
  1. 这些类正确地反映了一对多关系。
  2. NoMethodError 的问题似乎与您设置模型、路由、控制器和视图的方式有关。

让我们在你的模型中说你有 attr_accessible :id, :name (我在你的模型中没有看到这个,这就是错误的原因!)

在角色控制器中你需要这样的东西:

def new
     @character = Character.new
     @product   = Product.find(params[:character_id])
end

在视图(app/views/products/new.html.erb)中,您可以将新字符的链接添加为:

以上假设,您通过在 config/routes.rb 中包含以下内容来正确设置路由: “资源:产品” “资源:字符”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多