質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

2回答

4544閲覧

link_toのヘルパーのところでエラーがでてしまいます。 wrong number of arguments (4 for 0..3)

kento2543

総合スコア163

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2015/10/25 14:38

Mac Yosemite
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

どなたか助言頂けないでしょうか?
宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ページの通りdef index; end でのソートで試してみました

そのあとで、ヘルパーで利用するlink_tosort_name_members_path のようなパスの指定を追加すると質問にあるエラーが表示されました

コントローラとルートの変更にヘルパーメソッドを合わせる

現状のエラーが出ている形式ではなく、sort_name_members_path にパラメータを渡す形...

ruby

1link_to title, users_sort_name_path({:sort => column, :direction => direction, :class => css_class}) 2

...にすると、エラーもなく、指定のパスにパラメータを渡すことができるのではないでしょうか

(Ruby のバージョンが古すぎなければ

ruby

1link_to title, users_sort_name_path(sort: column, direction: direction, class: css_class)

といった書き方ができると思います)

link_to

API ドキュメントを参照すると、受け付ける引数の数と種類は

ruby

1link_to(name = nil, options = nil, html_options = nil, &block)

のようになっています

Hash の{} 省略

ruby

1def foo(title, args) 2 p args[:name] 3 p args[:age] 4end 5 6foo('foo', name: 'bar', age: 10) 7# => 'bar' 8# => 10

ソート処理をどのように実現しているか(クエリ パラメータを渡してソートする)を忘れなければ、どのような変則パターンにも対応できると思います

簡単に調べてみましたが、何か参考になれば幸いです

(参考にされた記事がさらに参照しているページが2010 年のものであることに留意してください)

Links

投稿2015/10/25 18:07

gouf

総合スコア2321

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kento2543

2015/10/26 03:59

ご回答ありがとうございます。 参考URLが多くて、とても参考になりました。 ご回答頂いた内容で、解決することができました!
gouf

2015/10/26 06:25

解決済みであれば、「ベストアンサー」を選択していただければ助かります
kento2543

2015/10/29 13:38

おそくなりましたが、ベストアンサー致しました。この度は有り難う御座いました!
guest

0

まず、link_to の API ドキュメントやソースコードをみてみます。

... link_to(name = nil, options = nil, html_options = nil, &block) public

... link_to(name = nil, options = nil, html_options = nil, &block)

...
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 つ目のパラメータはブロックです。

ブロックを使った指定例は以下にあります。

...
<%= 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 %>

投稿2015/10/25 17:16

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kento2543

2015/10/26 03:58

ご回答ありがとうございます。 調べるにあたっての手順を詳しく書いて頂き助かりました。 次回、同じような問題にあたったとき、この手順を参考に 事故解決できるよう頑張ってみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問