Category Archives: Ruby

[Ruby] 상수도 변할 수 있습니다.

루비에서 상수 선언은 따로 없다. 그저 앞글자만 대문자로 하면 된다.

(ex: HELLO, HELLO_WORLD, Welcome)

루비에서 당황스러웠던 것 중 하나는, 상수의 값도 변할 수 있다는 사실이다.

상수에 또다시 값을 대입하면 에러가 나는게 아니라 경고메시지만 난다.

그래서 왠지 루비의 상수는 상수라기 보다는 글로벌 변수 느낌이 난다.

상수값을 고정 시키기 위해서는 .freeze  method를 쓰면 된다.

근데 Array의 경우에는 array만 freeze 할 경우 내부변수 값이 변해버릴 수 있다.

그 경우에는 내부의 요소들도 맵으로 순환하면서 freeze 시켜야한다.

NETWORKS = [ "192.168.1" , "192.168.2" ].map!(&:freeze).freeze

 

더 확실한 방법은 모듈/클래스 자체를 프리징 시키는 것이다.

 

 

 

 

[Rails] Ajax로 Create, Update 요청시 발생하는 WARNING: Can’t verify CSRF token authenticity

CSRF공격을 막기위해서 X-CSRF-TOKEN이라는 것을 사용하는데,  Ajax요청 시에 이를 아래와 같이 보내줘야 한다.

$.ajax({
                url: '../star_update?id=' + id + '&stars=' + rating,
                beforeSend: function(xhr) {
                    xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))
                },
                type: 'put',
                success: function(data) {
                    console.log("success: " + data)
                }
            })

Rails의 CSRF 관련해서는 dobest.io/how-csrf-token-works/ 에 잘 나와 있다.

[Ruby] 심볼

심볼은 앞에 :(콜론) 을 붙인 클래스다.

이름과 값을 동시에 가지는데, String 과 비교하면 그 차이를 알 수 있다고 한다.

[82] pry(main)> "abc".object_id
=> 70191430731920
[83] pry(main)> "abc".object_id
=> 70191439924200
[84] pry(main)> "abc".object_id
=> 70191436425640
[85] pry(main)> "abc".object_id
=> 70191448084360
[86] pry(main)> :abc.object_id
=> 2827228
[87] pry(main)> :abc.object_id
=> 2827228
[88] pry(main)> :abc.object_id
=> 2827228

“abc”라는 문자열은 매번 새로운 id 값을 가지지만 (매번 새롭게 생성하지만) :abc, 즉 심볼은 생성과 동시에 값을 가짐으로서 동일한 주소를 참조하게 된다.

Rails에서는 query string의 값이나 post 의 값을 가져올 때 쓰곤 한다. params[:name] 이렇게..

[Rails] TextArea 줄바꿈 출력하기

Textarea에서는 줄바꿈으로 표현했는데, 막상 HTML에서는 줄바꿈으로 안나오는 문제가 있었다.

<p class=”card-text”>

지역변수: 소문자나 _ 로 시작함.
전역변수: $로 시작함
인스턴스 변수 : @로 시작함
클래스 변수: @@로 시작함
</p>

이런식으로 되어 있어, HTML 상에서는 한줄로 이어져서 나온다.

그럴 땐 simple_format을 사용하면 된다.

<p class="card-text"><%= simple_format(term.term_detail) %></p>

apidock.com/rails/ActionView/Helpers/TextHelper/simple_format

<p class=”card-text”>

<p>지역변수: 소문자나 _ 로 시작함.
<br />전역변수: $로 시작함
<br />인스턴스 변수 : @로 시작함
<br />클래스 변수: @@로 시작함
</p>

</p>

이런 식으로 <p> 태그안에 감싸져서 나온다.