【问题标题】:Passing two parameters not working传递两个参数不起作用
【发布时间】:2013-12-01 01:38:33
【问题描述】:

我这样扩展我的路线:

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] %>

它什么也不返回,或者最好说为零!为什么?谢谢

【问题讨论】:

  • 您在params[] 中看到了什么值?
  • {"page"=>"2", "photoid"=>"15", "action"=>"photos", "controller"=>"patients", "id"=> "79799"}
  • 在我的第一个链接中:photoid 在参数中是第一个

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


【解决方案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]) 为 nil 以呈现索引或类似内容,您可能希望在 before_filter 上实现这样的后备行为

【讨论】:

    猜你喜欢
    • 2016-09-22
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    相关资源
    最近更新 更多