Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 通过URL将参数传递给Rails中的控制器_Ruby On Rails_Exception_Controller_Parameter Passing - Fatal编程技术网

Ruby on rails 通过URL将参数传递给Rails中的控制器

Ruby on rails 通过URL将参数传递给Rails中的控制器,ruby-on-rails,exception,controller,parameter-passing,Ruby On Rails,Exception,Controller,Parameter Passing,Rails中存在一个问题,我已经在URL中创建了一些传递参数的路由 #routes.rb 根“日秀” 获取“/day/:date/:activity”=>“day#show” 获取“/day/:date”=>“day#index” 我制作控制器的日期如下 #day_controller.rb 类DayController“2015-03-01”} 所以通过这一切我有几个问题 我设置的路线对吗 我是否正确访问控制器中的参数 请给我任何反馈,我是Rails的新手,我很乐意学习如何改进我的结构。对于

Rails中存在一个问题,我已经在URL中创建了一些传递参数的路由

#routes.rb
根“日秀”
获取“/day/:date/:activity”=>“day#show”
获取“/day/:date”=>“day#index”
我制作控制器的日期如下

#day_controller.rb
类DayController<应用程序控制器
def秀
如果(!params.has_key?(:date))
@日期=getCurrentDate()
其他的
@日期=拆分日期(参数(:日期))
结束
@天=天。其中(“年=?和月=?和日期=?”、@date[0]、@date[1]、@date[2])
if(参数有_键?(:类型))
@活动=getAllData(参数(:类型))
结束
结束
def索引
@日期=参数(:日期)
如果(@date[0]=“?”)
@天=天
其他(@date[1]=“?”)
@天=天。其中(“年=?”,@date[0])
其他(@date[2]=“?”)
@天=天。其中(“年=?和月=?”、@date[0]、@date[1])
结束
结束
私有的
def getCurrentDate
日期=DateTime.now.to_
dateArrayOne=date.split('T')
dateArrayTwo=dateArrayOne[0]。拆分('-'))
结束
def拆分日期(日期)
finaldate=日期。拆分('-'))
结束
def getAllData(类型)
dataHash={}
案例类型
当“卡路里”
@每天,每天|
dataHash[:day.date]=day.carries
结束
当“步骤”
@每天,每天|
dataHash[:day.date]=day.steps
结束
当“活动分钟”
@每天,每天|
dataHash[:day.date]=day.activeMinutes
结束
当“距离”
@每天,每天|
dataHash[:day.date]=day.distance
结束
其他的
@每天,每天|
dataHash[:day.date]=day.carries
dataHash[:day.date]=day.steps
dataHash[:day.date]=day.activeMinutes
dataHash[:day.date]=day.distance
结束
结束
数据散列
结束
结束
因此,每当我输入任何带有日期或活动参数的URL(根很好,因为它只获取当前日期),我都会得到错误:

DayController#索引中的ArgumentError:参数数目错误(1个用于 0)在app/controllers/day_controller.rb:15:in'index'

正在传递参数,如异常页面中所示,该页面列出了:
请求参数:{“日期”=>“2015-03-01”}

所以通过这一切我有几个问题

  • 我设置的路线对吗
  • 我是否正确访问控制器中的参数

  • 请给我任何反馈,我是Rails的新手,我很乐意学习如何改进我的结构。对于混乱的代码,我也很抱歉,我没有太多时间进行重构或评论。

    如果您使用的是Rails 4,您将需要:

    然后,您可以执行以下操作:

    def index
      if params[:date]
        @date = params[:date]
        if(@date[0] == "?")
          @days = Day.all
        elseif(@date[1] == "?")
          @days = Day.where("year = ?",@date[0])
        elseif(@date[2] == "?")
          @days = Day.where("year = ? AND month = ?",@date[0],@date[1])    
        end
      end
    end
    

    我不确定它是如何复制粘贴的,但请考虑使用。 您应该使用
    params[:date]
    而不是
    params(:date)
    。它的行为类似于散列,而不是函数

    Patrick的解决方案几乎是正确的,但具有误导性,因为他没有正确使用强参数。POST数据需要强参数,但GET请求中的URL参数不需要强参数

    如果它是一个处理POST数据的操作,json输入格式如下:

    def index
      if day_params[:date] //not params[:date], which would raise an error
        @date = day_params[:date]
        if(@date[0] == "?")
          @days = Day.all
        elseif(@date[1] == "?")
          @days = Day.where("year = ?",@date[0])
        elseif(@date[2] == "?")
          @days = Day.where("year = ? AND month = ?",@date[0],@date[1])    
        end
      end
    end
    
    
    private
      def day_params
        params.require(:day).permit(:date, :activity)
      end
    
    {“日期”:{“日期”:[2015,3,15],“活动”:“运行”}

    然后您将使用强参数
    params.require(:day)
    将授予对内部哈希的访问权,因此
    params.require(:day).permit(:date,:activity)
    将授予对值的访问权。您可以这样使用它:

    def index
      if day_params[:date] //not params[:date], which would raise an error
        @date = day_params[:date]
        if(@date[0] == "?")
          @days = Day.all
        elseif(@date[1] == "?")
          @days = Day.where("year = ?",@date[0])
        elseif(@date[2] == "?")
          @days = Day.where("year = ? AND month = ?",@date[0],@date[1])    
        end
      end
    end
    
    
    private
      def day_params
        params.require(:day).permit(:date, :activity)
      end
    

    作为一个完全独立的问题,
    dataHash[:day.date]
    将不起作用。这将调用符号
    :day
    上的
    date
    方法,该符号不存在。您可能想使用
    dataHash[:day].date

    是否使用强参数?你们允许日期了吗?下次,请突出显示你们所指的代码块的哪一行。错误在
    参数(:date)
    内。它应该是
    params[:date]
    。这里不需要强参数,因为您没有对ActiveRecord使用mass assignment,您还手动处理date参数定义和不使用day_参数的可能重复;不是错误的原因;另见上文评论