控制器不接收id参数

时间:2013-01-08 02:15:02

标签: ruby-on-rails controller routes

我正在尝试显示一个显示喜欢微博的用户的页面。我希望Uri是localhost:3000 / microposts / someid#/ into_it。似乎通过路径没有响应控制器?

我在视图/ microposts / _micropost.html.erb文件中链接到此页面:

<%= link_to micropost.votes_for, into_it_micropost_path(@micropost) %>

由于此路径,我在浏览器中收到以下错误,并且页面未加载:

No route matches {:action=>"into_it", :controller=>"microposts", :id=>nil}

在我的微博控制器中:

def into_it  #for the view; displays who likes the post
  @title = "Into_it!"
  @micropost = Micropost.find(params[:id])
  render 'show_users_into_it'
end

micropost / show_users_into_it目前是一个空白文件

路由文件:

resources :microposts, only: [:create, :destroy, :into_it] do
  member do
    get :into_it
  end
end

在rake路线中我有:

into_it_micropost GET    /microposts/:id/into_it(.:format)     microposts#into_it

2 个答案:

答案 0 :(得分:1)

由于无效的@micropost而发生此错误。 @micropost应该是数据库中的对象。它应该有一个id。在您的错误消息中,您可以看到微博的id为nil(我猜@micropost是新记录)。

:id=>#<Micropost id: nil

如果您通过现有的@micropost,一切都会好的。

答案 1 :(得分:0)

真的只是一个愚蠢的错误。这条路线没有得到身份证。我必须做的只是改变:

into_it_micropost_path(@micropost)

into_it_micropost_path(micropost.id)

以便从数据库中的现有记录中获取id