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

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回答

2214閲覧

rails4 の redirect_to とかparams とか

zvub1123

総合スコア230

Ruby on Rails

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

Ruby on Rails 4

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

0グッド

0クリップ

投稿2015/01/26 07:11

現在、railsアプリケーションの作成中なのですが、進捗が滞っているので…

目的としては、
・new.html.erb でフォームに必要な値を入力してユーザ新規作成
・コントローラでDBにinsert
・insert後、show.html.erb で新規に作成したユーザの情報を表示
したいのですが、show.html.erbでの検索結果の表示がうまくいきません。

insert は問題なくできているので、whereとかfindの中の構文がおかしいのだと思うのですが…

環境
windows8.1
rails4
sqlite3

new.html.erb↓

lang

1 2<%= form_for User.new, :url => {:action => 'create'} do |u| %> 3 <%= u.label :name, :class => "name" %><br> 4 <%= u.text_field :name, :class => "text" %> 5 <br> 6 <%= u.label :username %><br> 7 <%= u.text_field :uname, :maxlength => 20, :class => "text" %> 8 <br> 9 <%= u.label :location %><br> 10 <%= u.text_field :loc, :class => "text" %> 11 <br> 12 <%= u.label :bio %><br> 13 <%= u.text_area :bio, :maxlength => 60 %><br> 14 <br> 15 <%= u.submit :class => "btn btn-primary" %> 16<% end %>

コントローラ↓

lang

1def create 2 @user = User.create( 3:name => params[:user][:name], 4:uname => params[:user][:uname], 5:loc => params[:user][:loc], 6:bio => params[:user][:bio]) 7 redirect_to :controller => 'users', :action => 'show', :uname => @user.uname 8 @user.save

show.html.erb↓

lang

1<%= User.where(params[:uname]) do |u| %> 2<h1><%= u.name %></h1> 3<p><%= u.uname %></p> 4<ul> 5 <li>Location : <%= u.loc %></li> 6 <li>About : <%= u.bio %></li> 7</ul> 8<% end %>

のように、ユーザネームでの検索を行いたいです。(一意キーなので)

whereメソッドやfindメソッドの条件を書き換えて色々試しているのですが、吐くエラーも様々なので、どうしたらいいものか…

検索は、コントローラ側で行うべきなのでしょうか?
また、何度やってもDBの先頭レコードしか取得できないのには何か理由があるのでしょうか?
うまく検索する方法を教えていただけるとありがたいです。。。

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

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

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

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

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

guest

回答2

0

ベストアンサー

やりたいことはこうではないですか?

lang

1class UsersController 2 # 他は省略 3 4 def show 5 @user = User.find_by(uname: params[:uname]) 6 end 7end

lang

1<h1><%= @user.name %></h1> 2<p><%= @user.uname %></p> 3<ul> 4 <li>Location : <%= @user.loc %></li> 5 <li>About : <%= @user.bio %></li> 6</ul>

投稿2015/01/26 14:38

hello-world

総合スコア1342

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

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

zvub1123

2015/01/27 00:04

ありがとうございます。 あっさりできてしまいました! @user do |u| u.name u.uname ... のようにしていたのがいけなかったみたいですね^^;
guest

0

エラー内容が不明なのでなんとも言えませんが
<%= User.where(params[:uname]) do |u| %>はeachではないのですか?
whereをこういう風に書いてるのは見たことありません
僕も初心者なので断言できませんが・・

通常、検索ロジックはコントローラに書くと思います。
コントローラーに検索ロジックを書きviewはu.nameなどをeachで回せば良いと思います。

経験談からですが、入門書は迷わず買った方が良いです。
躓いて2時間使うことはざらにありますが、入門書を見れば劇的にその回数を減らせます。

投稿2015/01/26 07:58

smith

総合スコア73

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

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

zvub1123

2015/01/27 00:07

ご回答ありがとうございます! 入門書を持っていないので手探りで作っていて躓きました。 ロジックによってコントローラ、ビューなどの操作を変えるのは、確かにいいですね。 入門書も近いうちに購入しようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問