我有如下嵌套资源:
employer.rb
class Employer < ActiveRecord::Base
has_many :listings
end
listing.rb
class Listing < ActiveRecord::Base
belongs_to :employer
end
我使用基本支架生成器构建了两个。
除非我为雇主创建新的商家信息,否则一切似乎都有效。路线是
new_employer_listing GET
/company/:employer_id/listings/new(.:format)
{:action=>"new", :controller=>"listings"}
当我导航到新的列表网址(company / employer_id / listings / new)
时我明白了:
NoMethodError in ListingsController#new
undefined method `listing' for #<Employer:0x102dd5e48>
以下是#new
的listing_controller代码 def new
@employer = Employer.find_by_username(params[:employer_id])
@listing = @employer.listing.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @listing }
end
end
同样,其他一切工作(显示,编辑等) - 我只是无法得到一个新的列表页面......任何帮助都会很棒。
谢谢!
//编辑以下
def create
@employer = Employer.find_by_username(params[:employer_id])
@listing = @employer.listings.new(params[:listing])
respond_to do |format|
if @listing.save
format.html { redirect_to(@listing, :notice => 'Listing was successfully created.') }
format.xml { render :xml => @listing, :status => :created, :location => @listing }
else
format.html { render :action => "new" }
format.xml { render :xml => @listing.errors, :status => :unprocessable_entity }
end
end
end
ERROR:
No route matches {:action=>"show", :controller=>"listings", :id=>#<Listing id: 20, job_title: "asd", location: nil, status: nil, industry: nil, years: nil, degree_type: nil, degree_field: nil, employer_id: 1, employers_id: nil, user_id: nil>}
答案 0 :(得分:2)
在雇主模型中,您添加了has_many :listings
关联。但是在您的控制器中,您可以拨打@employer.Listing.new
。这里不匹配的是列表和列表。
你应该这样做:
@listing = @employer.listings.new(params[:listing)
图片的标题说明:
不要忘记在@listing上拨打save
,否则将无法保存。
我更喜欢使用build
而不是new
,这样就可以直接在雇主协会中找到该列表。两种方法都有效,具体取决于您使用它们的方式。
答案 1 :(得分:1)
雇主has_many
个商家信息,因此您必须使用s调用@employer.listings
。