Rails 新手学习中遇到的问题,麻烦各位大牛指导

sound_of · 2012年12月13日 · 最后由 sound_of 回复于 2012年12月21日 · 3205 次阅读

我只贴相关代码: #event_attendees_controller.rb

class EventAttendeesController < ApplicationController
  def edit
    @attendee = @event.attendees.find(params[:id])
    if @attendee == nil
      throw "Attendee with id #{params[:id]} not found"
    else
      logger.info "Attendee with id #{params[:id]} is : #{@attendee.to_xml}"
    end
  end

  private
  def find_event
    @event = Event.find(params[:event_id])
  end
end

#event.rb

class Event < ActiveRecord::Base
   has_many :event_attendees
  def attendees
    return event_attendees
  end
end

#event_attendees/edit.html.erb

<%= form_for @attendee, :url => event_attendee_path(@event, @event_attendee), :method => :put do |f| %>
    <%= f.label :name, "Name" %>
    <%= f.text_field :name %>
    <%= f.submit %>
<% end %>

#event_attendees/index.html.erb

<ul>
  <% @attendees.each do |attendee| %>
    <li>
      <%= attendee.name %>
      <%= link_to "Show", event_attendee_path(@event, attendee)%>
      <%= link_to "Edit", edit_event_attendee_path(@event, attendee) %>
      <%= link_to "Delete", event_attendee_path(@event, attendee), :method => :delete %>
    </li>
  <% end %>
</ul>
<%= link_to "New Attendee", new_event_attendee_path(@event) %>

#event_attendee.rb

class EventAttendee < ActiveRecord::Base
  attr_accessible :name
  belongs_to :event
end

#routes.rb

resources :events do
    resources :attendees, :controller => :event_attendees
end

当在 index 页面点击 Edit 按钮的时候提示: No route matches {:action=>"show", :controller=>"event_attendees", :event_id=>#, :id=>nil} 很奇怪为什么传过来的 event_attendee 的 id 是 nil,但通过调试发现 controller 里面的 id 不是 nil,各位大牛能解释解释吗?

提醒下,先学习排列代码。

ok,不好意思

我不是很熟悉 rails,你的 url 是什么?edit_event_attendee_path 这个方法来自何处?

rake routes 看一下地址

edit 的 url 是 /events/7/attendees/2/edit,edit_event_attendee_path不是REST的写法吗?我运行rake:routes显示 edit_event_attendee GET /events/:event_id/attendees/:id/edit(.:format) event_attendees#edit

你的代码来自何处,是自己写的吗?建议还是先写些简单点的。

这是教程里的例子,不过他没有写全。

routes 如下:

where is your "show" action?

def find_event
    @event = Event.find(params[:event_id])
 end

这个方法是不是没调用?

#9 楼 @Roam

def show
  @attendee = @event.attendees.find(params[:id])
end

#10 楼 @xylinq 有的,只是没贴出来

before_filter :find_event, :only => [:show, :edit, :update, :delete]

edit 页面中的 @event_attendee 在 edit action 中没有看到,应该是@attendee吧?

头已昏!

#13 楼 @xylinq 多谢,已解决,edit.html.erb 里面的参数确实应该是@attendee

需要 登录 后方可回复, 如果你还没有账号请 注册新账号