繁体   English   中英

为什么我不能在Ruby中访问块中的实例变量?

[英]Why can't I access instance variables inside block in Ruby?

我正在使用Rails 4,Ruby 2.1和mongoid作为我的DBMS。

在我的create方法中,我正在创建一个传真对象,并使用Phaxio的API发送它。 由于各种原因,我试图(未成功)访问我的respond_to块内的属性。 @fax variable似乎有效,但是其他@fax variable则无效。 例如,如果传真被发送,我想将状态( @fax[:status] )设置为“已发送”,否则我希望它是“草稿”。 将其设置在块外的第五行,没有问题。 但是,当我进入自己的区块并成功发送传真时,似乎无法将其设置为“已发送”。

另外,我尝试用不同的方式写出来-现在它的params[:status] = "sent" ,但是我尝试了@fax.status@fax.status @fax[:status]fax.write_attribute(:status, "sent")

我已经阅读过文档,说我应该能够从块内部访问局部变量,所以这是实例变量吗? 我应该怎么做?

def create
@fax = Fax.new(fax_params)
@recipient = @fax.recipient_name
@number =  ("+1" + @fax.fax_number.to_s.gsub(/[^0-9]/, "")).to_s
@fax[:status] = "draft"

respond_to do |format|
  if @fax.save
      if params[:send]
        pdf_html, pdf_file = FAXMailer.save_pdf(@fax, current_user) 
        @sent_fax = Phaxio.send_fax(to: @number, string_data: pdf_html, string_data_type: 'html')

        if @sent_fax["success"]
          params[:status] = "sent"  
          format.html { redirect_to faxes_url, notice: @sent_fax["message"] }
        else 
          params[:status] = "draft"
          format.html {redirect_to faxes_url, notice: @sent_fax["message"]}
          format.json { render :show, status: :created, location: @fax }
        end

      elsif params[:draft]
        params[:status] = "draft"
        format.html { redirect_to faxes_url, notice: "Fax saved as draft" }
        format.json { render json: @fax.errors, status: :unprocessable_entity }
      end
  end
end
  end

提前致谢!

抱歉,状态应该是一个符号@ fax.update_attribute(:status,“ set”)

Sontya的想法正确,但是我必须在函数调用中放入:status,即@ fax.update_attribute(:status,“ set”)。 附带说明一下,有人可以引导我到我能弄清楚为什么以前的尝试无效的地方吗? 我是在使用不赞成使用的方法,还是我不知道的Rails 4约定?

谢谢大家!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM