传递两个参数不起作用

时间:2013-11-30 17:24:52

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

我像这样扩展我的路线:

photos_patient_path(@patient, {:photoid => f.id })

创建:

http://localhost:3000/patients/79799/photos?photoid=6

在我的rails控制器中,我有:

def photos 
    @photos = @patient.photos.paginate(:page => params[:page], :per_page => 8) 
    @photo = @photos.find(params[:photoid]) rescue nil
    @termins = @patient.termins.where("date >= ?", Date.today)
    render :show
  end 

在视图中:

<% if @photo == nil %>
 <%= render 'patient_photos' %>
 <% else %>
 <%= render 'patient_photo' %>   
 <% end %> 

上面的代码有效,现在我尝试添加另一个参数:

photos_patient_path(@patient, { :page => params[:page], :photoid => f.id })

创建:

http://localhost:3000/patients/79799/photos?page=2&photoid=15

但现在,在我看来,我打电话:

<%= params[:photoid] %>

它没有返回或更好地说没有!为什么?感谢

1 个答案:

答案 0 :(得分:1)

尝试使用不同于“照片”路径的单张照片的特定路线,我的意思是,有些路线如下:

get 'patients/:patient_id/photos/:photo_id', to: 'patients#patient_photo', as: 'patient_photo'

现在您在视图中不需要if

在您的控制器中,您将拥有

def photos 
  @photos = @patient.photos.paginate(:page => params[:page], :per_page => 8) 
  @termins = @patient.termins.where("date >= ?", Date.today)
end

def patient_photo
  @photo = @patient.photos.find(params[:photo_id])
end

我想这会解决您的问题,您的网址会更好看

编辑:添加了一条命名路线

并使用patient_photo_path(@patient,photo_id)

创建路径

编辑2:如果@ patient.photos.find(params [:photo_id])为零以呈现索引或类似内容,您可能希望在before_filter上实现这样的回退行为