字符#new中的NoMethodError

时间:2013-05-03 12:08:02

标签: ruby-on-rails associations controllers

我是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属性的值作为高度,重量,宽度和颜色。

Q3。如果可行(即Q2),我想在产品的展示页面中显示角色名称和价值。为此,我如何重定向到'show'产品页面??

我的charactercontroller for new,show和create:

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

现在,在输入字符/ new中的字符值并单击“创建”按钮后,它会显示以下错误

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

我想在products / show中显示角色名称和值。以上错误阻止我这样做..

我在productcontroller中的show方法:

def show

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

@character = Character.find(:all)

end

1 个答案:

答案 0 :(得分:0)

  1. 这些类是正确的,以反映一对多的关系。
  2. NoMethodError的问题似乎与您如何设置模型,路线,控制器和放大器有关。图。
  3. 让我们在你的模型中说     attr_accessible:id,:name(我在你的模型中没有看到这个,这就是错误的原因!)

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

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

    在视图(app / views / products / new.html.erb)中,您可以添加新字符的链接:     &lt;%link_to“Character”,new_product_character_path(product)%&gt;

    假设您通过在config / routes.rb中包含以下内容来设置路由: “资源:产品” “资源:人物”