Ruby on rails 4 不能';找不到带有';id';=-如何定位具有多个关联的id-Rails 4
如果这看起来像是一个简单的错误,我很抱歉,我是rails的新手,非常感谢您的建议和帮助Ruby on rails 4 不能';找不到带有';id';=-如何定位具有多个关联的id-Rails 4,ruby-on-rails-4,Ruby On Rails 4,如果这看起来像是一个简单的错误,我很抱歉,我是rails的新手,非常感谢您的建议和帮助 我有用户和广告 一个用户有许多广告 广告属于用户 广告是用户下的嵌套资源 当我签入终端时,我创建的用户具有id:10 当我签入终端时,我创建的advert具有id:6 在用户控制器中,我试图找到广告的id。我尝试了以下方法: @advert=advert.find(参数[:id]) @advert=advert.find(参数[:advert\u id]) @advert=@userr.adverts.
- 我有
和用户
广告
- 一个用户有许多广告
- 广告属于用户
- 广告是用户下的嵌套资源
- 当我签入终端时,我创建的
具有用户
id:10
- 当我签入终端时,我创建的
具有advert
id:6
用户控制器中
,我试图找到广告的id
。我尝试了以下方法:
@advert=advert.find(参数[:id])
@advert=advert.find(参数[:advert\u id])
@advert=@userr.adverts.find(参数[:id])
但是没有成功。我不断得到以下错误:
Couldn't find Advert with 'id'=10 [WHERE "adverts"."userr_id" = ?]
及
我看到代码正在寻找id为10的广告,而我实际上希望它找到id为6的广告
在my users_controller.rb中
def dashboard
if current_user
if current_user.adverts.present?
@advert = Advert.find(params[:id])
end
else
redirect_to error_path
end
end
在我的路由文件中
Rails.application.routes.draw do
devise_for :users
resources :users do
resources :adverts
member do
get 'dashboard'
end
end
end
因为有很多关系(用户有很多广告
&广告属于用户
)。我如何定位
用户控制器中广告的id。这一直是我关注的问题
一直在努力解决。如蒙指教,不胜感激
我不确定您在控制器中的何处获得此错误,哪些操作导致了问题。但是,下面是一个书签类的创建方法示例,该书签类属于一个主题,并且一个主题有许多书签
def create
@topic = Topic.friendly.find(params[:topic_id])
@bookmark = @topic.bookmarks.build(bookmark_params)
@bookmark.user_id = current_user.id
if @bookmark.save
flash[:notice] = "Bookmark saved."
redirect_to [@topic, @bookmark]
else
flash.now[:alert] = "Error saving bookmark."
render :new
end
end
您可以看到,我找到了与书签关联的主题,然后在找到书签时使用该主题来创建关联。book mark params是一个私有方法。然后我将当前用户分配给书签
看到您的广告和用户的完整控制器将很有帮助我认为这是您的路由问题。如果您的dashboard成员路由嵌套在user下,那么它应该生成一个users/:id/dashboard的路由,因此广告id不能作为参数使用。我会在您的命令行中运行“rake routes”进行调查
def create
@topic = Topic.friendly.find(params[:topic_id])
@bookmark = @topic.bookmarks.build(bookmark_params)
@bookmark.user_id = current_user.id
if @bookmark.save
flash[:notice] = "Bookmark saved."
redirect_to [@topic, @bookmark]
else
flash.now[:alert] = "Error saving bookmark."
render :new
end
end