2013-05-13 6 views
1

Извините, но это вопрос новичков.Ruby on Rails - link_to с круглыми скобками

Есть также много вопросов о «link_to» уже, но никто не ответил на мой вопрос, который я не думаю, что это действительно специфичны для link_to ...

Создание ссылки, как это работ:

<%= link_to person.automobile_id, person %> 

Но, пытаясь его как этот не работает:

<%= link_to (translation.request_id, translation) %> 

Это приводит к ошибке:

syntax error, unexpected ',', expecting ')' 

Это путает меня, так как мне кажется, что я просто оборачивать скобки вокруг аргументов для link_to.

Что я не понимаю?

ответ

2

В большинстве случаев скобки к методу аргумент необязателен в Ruby.

link_to("link name", path) 

эквивалентно

link_to "link name", path 

Последний пример более идиоматических в сообществе Rails.

Однако расстояние должно быть сохранено. если вы опустите скобку, то между методом и аргументом может быть только одно пространство. Это может показаться немного странным для кого-то нового для Ruby и Rails, но используется так, что вы привыкнете к нему быстро.

Исключение - если вы комбинируете методы вместе, а один из более ранних методов имеет аргумент, тогда вам нужно будет включить круглые скобки.

+0

Чтобы уточнить: Если вы говорите 'f (x)', то скобки просто используются для группировки * внутри * списка аргументов, они не используются в качестве разделителей для аргументов. Если вы говорите 'f (x)', то скобки используются как разделители для аргументов. Рассмотрим 'f (1 + 2) * 3' по сравнению с' f (1 + 2) * 3', первая такая же, как 'f (3) * 3', а вторая -' f (9) '. Скобки в вызове метода (обычно) необязательны, поэтому анализатор должен угадать, что означают скобки. –

+0

Оба являются хорошими ответами, поэтому извините, что нужно выбрать один по незначительным причинам! К сожалению, это поведение, связанное с пробелами, дает мне воспоминания о powershell. –

4

У вас есть дополнительное пространство:

link_to (translation.request_id, translation) 

следует читать:

link_to(translation.request_id, translation) 

Это ошибка синтаксиса в рубине:

[~]$ ruby -e 'def adds(x, y) x+y end; puts adds (1, 2)' 
-e:1: syntax error, unexpected ',', expecting ')' 
def c(x, y) x+y end; puts adds (1, 2) 
           ^
+0

см. Мое объяснение разницы – fontno

Смежные вопросы