17

ドキュメント(およびグーグル)から、セグメントとのリンクを生成する方法は明らかpodcast/5#commentsです。:anchortoに値を渡すだけですlink_to

私の懸念は、<a name="comments">Comments</a>タグを生成するというより単純なタスク、つまり最初のリンクの宛先についてです。

私は次のことを試しましたが、動作しているように見えましたが、マークアップは私が期待したものではありませんでした:

link_to "Comments", :name => "comments"
link_to "Comments", :anchor => "comments"

明らかな何かが欠けていると思います。ありがとう。

4

3 に答える 3

54

Ruby のシンタックス シュガー (Rails が多用する) に混乱しています。あなたの質問に答える前に、これについて簡単に説明させてください。

ruby 関数がハッシュである単一のパラメーターを取る場合:

def foo(options)
  #options is a hash with parameters inside
end

括弧/括弧を「忘れる」ことができ、次のように呼び出すことができます。

foo :param => value, :param2 => value

Ruby は空欄を埋め、あなたが達成しようとしていることは次のとおりであることを理解します。

foo({:param => value, :param2 => value})

さて、あなたの質問に: 2 つのオプションのハッシュlink_toを取ります - 1 つは呼び出され、もう1 つは. このように定義されていると想像できます (これは概算であり、はるかに複雑です)。optionshtml_options

def link_to(name, options, html_options)
...
end

さて、このように呼び出すと:

link_to 'Comments', :name => 'Comments'

Ruby は少し混乱します。「空白を埋めよう」としますが、間違っています:

link_to('Comments', {:name => 'Comments'}, {}) # incorrect

part は!name => 'Comments'ではなく、オプションに属していると見なされます。html_options

自分で空白を埋めて Ruby を助けなければなりません。すべての括弧を配置すると、期待どおりに動作します。

link_to('Comments', {}, {:name => 'Comments'}) # correct

必要に応じて、最後の括弧のセットを実際に削除できます。

link_to("Comments", {}, :name => "comments") # also correct

ただし、html_options を使用するには、最初の括弧のセットを残す必要があります。たとえば、確認メッセージと名前を含むリンクの場合、次のようにする必要があります。

link_to("Comments", {:confirm => 'Sure?'}, :name => "comments")

他の Rails ヘルパーも同様の構造 (つまりform_for, collection_select) を持っているので、このテクニックを習得する必要があります。疑わしい場合は、すべての括弧を追加してください。

于 2010-01-19T18:30:13.927 に答える
14

Railsを通過したい場合は、content_tagdocs)をお勧めします。

例:

content_tag(:a, 'Comments', :name => 'comments')
于 2010-01-19T10:46:52.547 に答える
0
<%= link_to('new button', action: 'login' , class: "text-center") %>

login.html ig のアンカー タグを作成しました

<a href="login.html" class = "text-center"> new button </a>

そして

<a href="admin/login.html" class = "text-center"> new button </a>

使用する

<%= link_to('new button', controller: 'admin',
    action: 'login' , class: "text-center") %>
于 2016-12-02T07:43:39.200 に答える