shanshan888
shanshan888
2009-04-15 21:34
浏览 239
已采纳

Rails controller 语句不理解

@photo = Photo.new(:upload_file => params[:Filedata])

controller 里面这句话怎么理解呢? 括号里面是什么意思呢
[b]问题补充:[/b]
[i]保存上传的文件吧[/i]

这个我知道,我是问

括号里面的这种写法怎么这么怪呢
是赋值语句么?
[b]问题补充:[/b]
[i]特定的语法嘛,php就是这样的[/i]

恩。。。可以把这个语句拆分开来么?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • vwangzhen
    vwangzhen 2009-04-17 17:32
    已采纳

    @photo = Photo.new(:upload_file => params[:Filedata])
    也可以
    @photo = Photo.new
    @photo.upload_file = params[:Filedata]

    但是如果你model 层有set方法的话,就不能分开了
    就必须在初始化的时候值

    顺便也给你说一下model 的set 方法

    def uploaded_picture=(picture_field)
    if picture_field !=''&& picture_field !=nil

    self.length = picture_field.length/1024
    if self.length <500
    #self.data = picture_field.read
    self.name = base_part_of(picture_field.original_filename)
    self.content_type = picture_field.content_type.chomp
    if !File.exist?("#{RAILS_ROOT}/public/upload")
    FileUtils.makedirs("#{RAILS_ROOT}/public/upload")
    end
    File.open("#{RAILS_ROOT}/public/upload/#{self.name}", "wb") do |f|

    f.write(picture_field.read)
    end

    end
    end
    end

    点赞 评论
  • wanghaolovezlq
    wanghaolovezlq 2009-04-15 21:37

    保存上传的文件吧

    点赞 评论
  • wanghaolovezlq
    wanghaolovezlq 2009-04-15 21:53

    特定的语法嘛,php就是这样的

    点赞 评论
  • weixin_42513366
    Candyut 2009-04-15 23:03

    建议把ruby基础先打牢。解释一下吧:
    :upload_file => params[:Filedata]

    这其实是个hash,键是:upload_file,值是params[:Filedata]。

    这个params是rails中的http请求参数。params本身又是个hash,params[:Filedata]是取params中键为:Filedata的值。

    ruby的语法中,如果参数只有一个,并且这个参数是hash,那么它的{}可以省略。

    Photo.new(:upload_file => params[:Filedata])
    可以写成
    Photo.new({:upload_file => params[:Filedata]})

    假设http请求中有个参数,它的键是:Filedata,值是"value",那么params[:Filedata]取到的到就是"value"这个值。
    这时候
    :upload_file => params[:Filedata]
    就相当于
    :upload_file => "value"

    点赞 评论
  • weixin_42513366
    Candyut 2009-04-15 23:15

    纠正一下
    [quote]ruby的语法中,如果参数只有一个,并且这个参数是hash,那么它的{}可以省略。[/quote]
    这里我说错了。当方法的第1个参数是个hash时,不能用{}来表示hash,否则ruby无法判断它是个block还是个hash。

    [code="ruby"]def my_method(a_hash)
    puts a_hash[:a_key]
    end

    #如果有上面这个方法,你可以这样调用:

    my_method :a_key => "the value" #这就是你给的例子的调用方式

    #也可以这样调用

    my_method Hash[:a_key => "the value"]
    [/code]

    点赞 评论
  • weixin_42513366
    Candyut 2009-04-16 12:31

    前面说的有些问题
    是如果最后一个参数是hash可以省略{}
    并且这样做的好处是无需记住参数的位置

    点赞 评论
  • tangyuanjian
    tangyuanjian 2009-04-17 11:14

    upload_file = params[:Filedata]
    一个简单的赋值语句e

    点赞 评论

相关推荐