railsのscaffoldで作成したnew.html.erbのページに日付や時間を入力できるselectboxを複数個作成し、
その値をControllerで取得したいのですがどうすればよいでしょうか?

date_selectやtime_selectを使うとviewは簡単に作成できるのですが、
selectboxが複数個あり、(1i)、(2i)のように変数がControllerにくるので上手く取得する方法が分かりません。

(for文を使ってnameをdate1、date2とかにしておいて、
Controllerでそれを指定、後はハッシュからデータをとるしかないですか?)

以上、よろしくお願いいたします。

A 回答 (1件)

>>selectboxが複数個あり、(1i)、(2i)のように変数がControllerにくるので上手く取得する方法が分かりません。



別々に送られてくる年・月・日データを1つの文字列にまとめて

paramtheday = params[:shedule]['theday(1i)']+'-';params[:shedule]['theday(2i)']+'-'+params[:shedule]['theday(3i)']

さらに、Date型に変換する事例がありました。

datetheday = Date.parse(paramtheday)

(shedule,thedayは実際のアプリにあわせて変えます。)

参考になりますでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。

やはり、独自に作成した日付用のselectboxだとそのようにするしかないですね。
Date.parseについては使い勝手も良さそうなのでなんとか頑張ってみようと思います。

お礼日時:2009/05/22 18:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QRails コンボボックスの値の保持について(select_tag,c

Rails コンボボックスの値の保持について(select_tag,collection_select)

こんにちは。
Ruby on Railsで簡単な一覧検索画面を作成中の者です。

検索時の検索条件にコンボボックスを使用しており、検索後にコンボボックスの値を保持したいのですが、どうしてもできません。

どなたかお分かりの方がおられましたらご教授いただけないでしょうか。
下記、作成中のソースです。

Viewの検索条件部
<%- form_tag({:action => "search"},{:method=> "GET"}) do -%>
<th class="U" align="left" width="10%"><label for="userNm">ユーザー名</label></th>
<td width="90%"><%= text_field_tag :userNm, @userNm %></td>

 <th class="U" align="left" width="10%"><label for="authCd">社員権限</label></th>
<td width="90%">
 <%= collection_select(:auth, :authCd, Auth.find(:all, :order => "AUTH_CD"), :id, :AUTH_NM, :include_blank => true) %>

 <td align="center"><%= submit_tag '検索' %></td>

Controllerクラス:

def search

#画面パラメータから検索条件を作成
c = Condition.new

# ユーザー名
userNm = ""
if params[:userNm]
userNm = params[:userNm]
c.and "USER_NM", "LIKE", "%#{userNm}%"
end
# コンボボックスの値を取得
if params[:auth] && !params[:auth]["authCd"].blank?
c.and "AUTH_CD", params[:auth]["authCd"]
end

# 検索処理
@users = User.paginate(:order => "USER_ID asc",
:per_page => 5,
:page => params[:page],
:conditions => c.where)

# 検索条件保持
@userNm = params[:userNm]
# コンボボックスの値が保持できない
if params[:auth]
@auth_authCd = params[:auth]["authCd"]
end

respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @users }
end
end

見づらくて申し訳ありませんが、ざっと上記のようになっています。
もう1つの検索条件であるユーザー名(userNm)は保持できるのですが、コンボボックス(社員権限)の値が保持できません。

select_tagや、selectも使ってみたのですが、どちらも同じ結果でした。
コンボボックスの条件は、Authモデルから値を読込み、一番上は空白にする。というものです。

どのように記述すれば保持できるのか色々調べてみたのですが、結局分からず仕舞いでした。。

どうぞ宜しくお願い致します。

Rails コンボボックスの値の保持について(select_tag,collection_select)

こんにちは。
Ruby on Railsで簡単な一覧検索画面を作成中の者です。

検索時の検索条件にコンボボックスを使用しており、検索後にコンボボックスの値を保持したいのですが、どうしてもできません。

どなたかお分かりの方がおられましたらご教授いただけないでしょうか。
下記、作成中のソースです。

Viewの検索条件部
<%- form_tag({:action => "search"},{:method=> "GET"}) do -%>
<th class="U" align="left" width="10%"><...続きを読む

Aベストアンサー

オプションのselectedにid値と一致する値をセットすると反映するので

<%= collection_select(:auth, :authCd, Auth.find(:all, :order => "AUTH_CD"), :id, :AUTH_NM, :include_blank => true) %>



<%= collection_select(:auth, :authCd, Auth.find(:all, :order => "AUTH_CD"), :id, :AUTH_NM, {:selected => @auth_authCd.to_i, :include_blank => true } ) %>


Controllerで@auth_authCdが宣言されないとViewでエラーが起きるので

if params[:auth]
@auth_authCd = params[:auth]["authCd"]
end



@auth_authCd = (params[:auth].present? ? (params[:auth]["authCd"] || '') : '')

ソース見た感じだとこんな感じでどうでしょう。

オプションのselectedにid値と一致する値をセットすると反映するので

<%= collection_select(:auth, :authCd, Auth.find(:all, :order => "AUTH_CD"), :id, :AUTH_NM, :include_blank => true) %>



<%= collection_select(:auth, :authCd, Auth.find(:all, :order => "AUTH_CD"), :id, :AUTH_NM, {:selected => @auth_authCd.to_i, :include_blank => true } ) %>


Controllerで@auth_authCdが宣言されないとViewでエラーが起きるので

if params[:auth]
@auth_authCd = params[:auth]["authCd"]
end



@...続きを読む

QRuby 改行文字の挿入

こんにちは。
Rubyの質問です。
htmlの文章にrubyで改行文字を挿入してそれを認識させたいのですが、
htmlの文章内に¥nを挿入しても読み込んだ際にうまく認識してくれませんでした。

何か他に方法があるのでしょうか。
ご教授の程よろしくお願い致します。

Aベストアンサー

どのようにして\nを挿入したのか、不明ですが、エディタを使用して行った前提で回答です。
改行コードを埋め込む場合は、\nを挿入したい位置で、Enterキーを押下してください。
それで、見かけ上、2行になれば、そこに改行コードが埋めこまれたことになります。

尚、通常は\nの文字そのものは、\とnの2文字にすぎません。
ruby のスクリプトでそれを"\n"のようにダブルクオートでくくった場合、それをrubyが改行コードとして扱う
という特別の約束があります。

ですので、エディタで行なう場合は、実際の改行コードを埋め込まないといけません。

Qテーブル内の文字列を改行させたい

<TABLE border="1">
<tr> <TD>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</TD>
</tr>
</TABLE>

これを、ある一定の幅を指定して改行させたいのですが、
CSSを使おうが使わず指定しようが、反映されません。
全角文字だと反映されます。

IE6、IE7で対応させたいと思っています。

CSSでも何でも良いので、どうすれば対応出来るのか
ご教示下さい。

Aベストアンサー

英数半角文字だと、続けて入力した場合、一つの単語とみなして禁則処理をしてしまうんだと思います。
なので、<br>で改行するのがいいのかと思いますが、
IEで対応したいということなので、IE7で動作するかはわかりませんが、
word-break:break-all;
の指示で単語の切れ目を無視して改行してくれると思います。

参考URL:http://www.htmq.com/style/word-break.shtml

Qポートの80と443

こちらのサービス(https://secure.logmein.com/)を利用すると、インターネットを見られるサーバーのポートの80と443が空いていればルータやファイアウォールに特段の設定なく外部からサーバーを操作できるそうですが、逆にサーバーのポートの80や443を空けることには何か危険性があるのでしょうか。

Aベストアンサー

ポート80は一般的なHTTP、ポート443はHTTPSです。
この2つのポートがあいていなければインターネット接続(WEBブラウジング)は出来ません。
ですから、ほとんどのファイアウォールでこのポートは開いています。(インターネット接続を制限している社内LANでは当然閉じていますが)

ちなみに、よく使うポートとしてはFTPで20、21、SMTP(送信メール)で25、受信メールPOP3で110あたりです。セキュリティポリシー上、この辺は制限される事も多いですが、HTTP 80、HTTPS(暗号化用)443は通常閉じません。


危険性?
WEBプロトコルを使ってFTP的なファイル転送(WebDAV)やVPN等も出来るようになっています。当然そこにはある種の危険はつきものですが、WEBブラウジングに伴う危険と大きく変わりません。ウィルス等に感染していればこの2つのポートだけでも相当危険でしょうね。

参考まで。

Qファイル編集について

RedHat9でサーバ上のファイルをviで編集して上書きしようとすると、

E45: 'readonly' option is set (add ! to override)


と表示され上書きに失敗します。
回避する方法はあるでしょうか。
よろしくお願いします。

Aベストアンサー

問題は二つあって、ファイルが書き込み禁止であることと、viがファイルが書き込み禁止であると認識していることです。
前者はchmodなどで書き込みを許可します。viはファイルのモードを編集開始したときに調べるだけなので、後で書き込み許可しても、上書きできません。:w!
コマンドで、強制書き込みを指示します。

管理者(root)なら、ファイルのモードを変えなくてもviの :w! コマンドで書き込み可能です。

ただし、設定ファイルが書き込み禁止モードになっているというのは意味があってのことなので、よくしらべてください。RCSで管理しているのなら、いきなりviで編集してはいけません。

Qテーブルタグの中にdivを含めてはダメ?

テーブルタグの中にdiv要素を入れるとダメなのでしょうか?
何か不都合でもあるのでしょうか?
何かご存知の方がいれば教えていただけませんか?

Aベストアンサー

以下、HTML 4.01での話です。(XHTMLでもほぼ同じだと思います)

tableタグ直下に書けるのは、caption,col,colgroup,head,tfoot,tbodyと定義されています。
特定の条件下でtbodyが省略できますので、実際はtrも書けます。これら以外は書けないことになっています。
tr直下にはth,tdが書けることになっています(それ以外は不可)。

th,tdの下にはブロック要素が書けるので、divも書けます。

このように、テーブル内でth,tdの中以外でdivが使えないのはHTMLの仕様でそう決まっているからです。

Qselectを変更不可にしたい

いつもお世話になっております。
今回はselectについてお聞きしたいです。

ある条件でselectを選択不可にしようと思い、

if(...) Selectbox.disabled = true;

としておりますが、選択は不可能になりましたが灰色がかってしまいます。
できれば色は黒いままで選択不可にしたいのですがどのように
すれば実現できますでしょうか?
ご教授お願いします。

Aベストアンサー

たとえば、選べるけど、値が変えられないとかでしたらこんな感じで

<script>
function check(obj){
var s=obj.form.hoge;
if(obj.checked){
s.index=s.selectedIndex;
s.onchange=function(){this.selectedIndex=this.index;}
}else{
s.onchange=function(){return false;}
}
}

</script>
<form>
<input type="checkbox" onClick="check(this)">変更不可
<select name="hoge">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
</select>
</form>

Qボタンを横に並べて表示させる方法

<input type="button"> ←このボタンを、並べて表示させるにはどうしたら良いでしょうか? (tableは使わない方法で) よろしくお願いいたします

Aベストアンサー

ソースをください。

inputはインライン要素なので改行は入らないです。

QonClickで関数呼出し後に、結果に応じてsubmitを実行する方法

JavaScriptで、
function func() {
 if (a==0) {
  alert("処理しない");
  return false;
 }
 return true;
}
と、a=0ならfalseを返し、それ以外ならtrueを返す関数を定義しています。

そして、FORMタグで
<FORM NAME="FormName" ACTION="next.html">
<INPUT TYPE="button" VALUE="next" NAME="button1" onClick="return func();submit();">
</FORM>
と記述しています。
要は、ボタンを押下した際にfunc関数がtrueを返せば、next.htmlに
遷移させたいのですが、上記記述では、遷移しません・・・
onClick部分にonClick="return func(),submit();"と記述した場合、
func関数の実行結果がtrueでもfalseでも遷移してしまいます。
そこで、なんとなくonClick="return func()&&submit();"と記述してみたところ、
func関数がtrueの時のみうまく遷移するようになりました。

これは偶然そう動作しているのでしょうか、それとも上記は正しい記述方法なのでしょうか?
正しい記述方法ならいいのですが、上記以外に正式な記述方法があれば
教えていただけないでしょうか?

※TYPE="submit"にすればいいとは思うのですが、buttonで実現したいと
考えております。

JavaScriptで、
function func() {
 if (a==0) {
  alert("処理しない");
  return false;
 }
 return true;
}
と、a=0ならfalseを返し、それ以外ならtrueを返す関数を定義しています。

そして、FORMタグで
<FORM NAME="FormName" ACTION="next.html">
<INPUT TYPE="button" VALUE="next" NAME="button1" onClick="return func();submit();">
</FORM>
と記述しています。
要は、ボタンを押下した際にfunc関数がtrueを返せば、next.htmlに
遷移させたいのですが、上記記述では、遷移しませ...続きを読む

Aベストアンサー

3つのパターンをみる限り、理由は以下の通りと思います。
1.セミコロン(;)で区切った場合、
この場合、「return func();」と「submit();」とは別の文です。returnはその時点の値を戻して、それ以降の動作を打ち切ってしまいます。よって、onClickイベントはfuncメソッドの戻り値(true/false関係なく)を戻して、そこで終了、それ以降のsubmitは実行しないとなります。

2.カンマ(,)で区切った場合、
この場合、「return func(),submit();」が1つの文となります。この「,」は、左右の式を評価して、右式を結果とする演算子です。よって、funcメソッド、submitメソッド両方を評価するため、funcメソッドの戻り値に関係なく、submitされます。

3.&&で区切った場合、
論理演算子「&&」は、左右ともにtrue(0以外)の場合のみtrueとする演算子です。また、2項論理演算子は左式から評価し、左式だけで全体の結果がわかる場合、右式を評価しません。よって、funcメソッドがfalseを戻した場合、その時点でsubmitを評価しなくても演算結果は必ずfalseとなるのでそこで打ち切られ、trueを戻した場合、submitを評価しないと演算結果を得られないため、遷移したわけです。「&&」を「||(論理和)」に変更すると逆の結果得たと思います。

さて、では3の「&&」が正しいかと言われたら、文法上は正しいです。ただし、他人がみてわかるとは思えません。
そこで、以下の記述はいかがでしょう。読んでみてソースを理解できますか。


<FORM NAME="FormName" ACTION="next.html">
<INPUT TYPE="button" VALUE="next" NAME="button1" onClick="func()">
</FORM>

(中略)

// funcの定義
function func() {
 if (a==0) {
  alert("処理しない");
  return ;
 }
 document.FormName.submit();
}

要は、ボタンを押されたら、funcを呼び出せ。
funcでは、aが0ならば、そこで終了しろ。
そうでなければ、documentオブジェクト内のFormNameと言う名前のオブジェクトのsubmitメソッドを呼べ。
です。

3つのパターンをみる限り、理由は以下の通りと思います。
1.セミコロン(;)で区切った場合、
この場合、「return func();」と「submit();」とは別の文です。returnはその時点の値を戻して、それ以降の動作を打ち切ってしまいます。よって、onClickイベントはfuncメソッドの戻り値(true/false関係なく)を戻して、そこで終了、それ以降のsubmitは実行しないとなります。

2.カンマ(,)で区切った場合、
この場合、「return func(),submit();」が1つの文となります。この「,」は、左右の式を評価して、右...続きを読む

Qの意味を教えてください。

Javascriptを見ていると
<a href="#" onClick="new_open();return false">
なる記述がありますが、
この<a href="#"
の部分の意味を教えてください。
<a herf まではわかるのですが、この#はどのようないみなのでしょうか?

Aベストアンサー

href="#" というのは「そのページの最上部へのリンク」という意味で、スクロールした場所から一番上に戻したい場合に使います。
ちなみに、同ページ内への # 指定でのリンクでは、ページは読み込まれずスクロールするだけです。

<a href="#" onClick="new_open();return false">
というのは、そのリンクがクリックされた時に new_open という関数を実行し、他の処理はするな、という意味です。
return false というのが、A タグ本来のジャンプ動作をキャンセルさせるためのもので、これを取ってしまうとページ最上部にジャンプしてしまいます。

このスクリプトを書いた人は onClick だけが必要だったのでしょうが、href がないとリンクの下線が出ないなどの不都合があるため、やむなく # を書いたのでしょう。

JavaScriptの内容を実行したいだけなら、
<a href="javascript:new_open()">
と書けば十分なのですが、一部のブラウザではこのタイプのリンクをクリックすると、アニメーションGIFが止まってしまうなどの弊害があるため、嫌う人もいるようです。

また、JavaScriptが有効でない環境の人は、質問に書かれたリンクをクリックしてもページ最上部に戻されるだけで、開くべきページの内容を見ることができません。
なので、
<a href="ページのURL" target="_blank" onClick="new_open(); return false">
とするなどして、非JavaScript環境にも対応した方が親切です。

長文失礼しました。

href="#" というのは「そのページの最上部へのリンク」という意味で、スクロールした場所から一番上に戻したい場合に使います。
ちなみに、同ページ内への # 指定でのリンクでは、ページは読み込まれずスクロールするだけです。

<a href="#" onClick="new_open();return false">
というのは、そのリンクがクリックされた時に new_open という関数を実行し、他の処理はするな、という意味です。
return false というのが、A タグ本来のジャンプ動作をキャンセルさせるためのもので、これを取ってしまうとペー...続きを読む


人気Q&Aランキング

おすすめ情報