link_toのヘルパーのところでエラーがでてしまいます。 wrong number of arguments (4 for 0..3)
解決済
回答 2
投稿
- 評価
- クリップ 0
- VIEW 3,328
ruby 2.2.0p0
Rails 4.2.0
以下の記事をもとに、ソート順で並び替える実装をしました。
http://www.virment.com/rails-sortable-table/
その記事ではindexのところでの実装だったため、
コントローラーは以下にし、
def sort_name
#ソート順の記述
end
config/route.rb
にもルーティングを記述しております。
その上で、rake routesをして確認もしております。
sort_name_members GET /members/sort_name(.:format) members#sort_name
そこで、ですが、link_to のところに4つ引数を追加するとエラーが出てしまいます。
link_to title, sort_name_members_path, {:sort => column, :direction => direction}, {:class => css_class}
エラー内容
Rendering 500 with exception: wrong number of arguments (4 for 0..3)
尚、以下の2つだとエラーはでないものの、classが適応されていないため、ソートが上手くいきませんでした。
link_to title, sort_name_members_path, {:sort => column, :direction => direction}
link_to title, sort_name_members_path, {:sort => column, :direction => direction, :class => css_class}
調べていると似たような問題が出てきたため、以下を参考に、()を入れたりして対処していたのですが、上手く動作が出来ませんでした。
参考:
https://teratail.com/questions/2578
どなたか助言頂けないでしょうか?
宜しくお願いします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
def index; end
でのソートで試してみました
そのあとで、ヘルパーで利用する
link_to
にsort_name_members_path
のようなパスの指定を追加すると質問にあるエラーが表示されました
# コントローラとルートの変更にヘルパーメソッドを合わせる
現状のエラーが出ている形式ではなく、
sort_name_members_path
にパラメータを渡す形...
link_to title, users_sort_name_path({:sort => column, :direction => direction, :class => css_class})
...にすると、エラーもなく、指定のパスにパラメータを渡すことができるのではないでしょうか
(Ruby のバージョンが古すぎなければ
link_to title, users_sort_name_path(sort: column, direction: direction, class: css_class)
といった書き方ができると思います)
# link_to
API ドキュメントを参照すると、受け付ける引数の数と種類は
link_to(name = nil, options = nil, html_options = nil, &block)
のようになっています
# Hash の{} 省略
def foo(title, args)
p args[:name]
p args[:age]
end
foo('foo', name: 'bar', age: 10)
# => 'bar'
# => 10
ソート処理をどのように実現しているか(クエリ パラメータを渡してソートする)を忘れなければ、どのような変則パターンにも対応できると思います
簡単に調べてみましたが、何か参考になれば幸いです
(参考にされた記事がさらに参照しているページが2010 年のものであることに留意してください)
# Links
* Ruby on Rails API
* ActionView::Helpers::UrlHelper - Ruby on Rails API
* ruby on rails - Add querystring parameters to link_to - Stack Overflow
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
- APIDOC link_to http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to
... link_to(name = nil, options = nil, html_options = nil, &block) public
- ActionView::Helpers::UrlHelper link_to http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to
... link_to(name = nil, options = nil, html_options = nil, &block)
- link_toでurlをそのまま表示したaタグを作りたかったら第一引数をnilに http://qiita.com/sue738/items/e7bcac8bae403760af82
...
def link_to(name = nil, options = nil, html_options = nil, &block)
html_options, options, name = options, name, block if block_given?
options ||= {}
html_options = convert_options_to_data_attributes(options, html_options)
url = url_for(options)
html_options['href'] ||= url
content_tag(:a, name || url, html_options, &block)
end
4 つ目のパラメータはブロックです。
ブロックを使った指定例は以下にあります。
- How to use link_to in Rails http://mixandgo.com/blog/how-to-use-link_to-in-rails
...これは、次の書き方と同等です。
<%= link_to root_path do %>
<%= content_tag :span, "Home", :class => "home-link" %>
<% end %>
<%= link_to "<span class='home-link'>Home</span>".html_safe, root_path %>
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.09%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2015/10/26 12:59
参考URLが多くて、とても参考になりました。
ご回答頂いた内容で、解決することができました!
2015/10/26 15:25
2015/10/29 22:38