-2

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

Q1。两个模型之间给定的关联是否正确?

class Product < ActiveRecord::Base

has_many :characters

end


class Character < ActiveRecord::Base

belongs_to :product

end

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

它显示NoMethodError in Characters#new 错误。

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

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

注意:在迁移之前,我在字符中创建了 name 属性的值,例如 height、weight、width、color。

Q3。如果可行(即 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
4

1 回答 1

0
  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)中,您可以将新字符的链接添加为:<% link_to "Character", new_product_character_path(product) %>

以上假设,您通过在 config/routes.rb 中包含以下内容来正确设置路线:“resources :products”“resources :characters”
于 2013-05-03T13:02:50.713 回答