Railsで選択リスト付きのAjaxのフォームを作ったのですが、コントローラでの値の受け取り方が分かりません。params[:select_fs_items_1]とするだけではだめなのでしょうか?


<% form_remote_tag :url => { :action => :add_item_to_fs_items_box} do -%>

<p>損益計算書項目</p>

<%= select_tag 'select_fs_items_1',
options_for_select([["売上高",":net_sales"],["営業利益",":operating_profit"],
["経常利益",":ordinary_income"],["純利益",":net_income"],
["1株当たり純利益",":earnings_per_share"]]) %>

<%= submit_tag '表示項目に追加' %>

<% end %>

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2009/11/27 17:25:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:aiaida333 No.1

回答回数166ベストアンサー獲得回数4

わからない。

じりきでがんばれ

http://q.hatena.ne.jp/1258780694

  • id:kn1967
    私が知らないだけなのかもしれませんが、
    =が抜けてたり do が入ってたりの意味が理解できないためコメント欄にします。

    <%= form_remote_tag(
    :update => '更新したいid'
    :failure => "alert('失敗')",
    :complete => "alert('成功')",
    :url => {:action => :add_item_to_fs_items_box}) %>;

    成功/失敗いずれも出なければviewのほうが悪い事が考えられ、
    失敗が続くようであればclassのほうが悪いか、もしくはviewとclassでidが合ってないなど、
    原因はつかめるようになると思います。
  • id:tyn
    kn1967さん、コメント有難うございます。

    =とdoは手元にある参考書の記述に従いました。Rails1.2系の参考書だからでしょうか。私も1.2.6を使っています。

    alertは成功が出ました。

    def add_item_to_fs_items_box
    @item_value = params[:select_fs_items_1]
    render :update do |page|
    page.insert_html :bottom, 'fs_items_box_1', '<li>aaa<%= @item_value %></li>'
    end
    end

    上記のコントローラのコードを書いたのですが、aaaはビューに表示されても@item_valueが表示されないので、フォームの値を取得する方法が分かりません。。
  • id:kn1967
    変数が取れるか取れないかではなくて、
      '<li>aaa<%= @item_value %></li>'
    では変数が展開されてないってのが問題点のような・・・。
      '<li>aaa' + @item_value + '</li>'
    などと変えて試してみてください。

    展開に関しては下記参照。
    http://www.ruby-lang.org/ja/man/html/_A5EAA5C6A5E9A5EB.html#a.bc.b0.c5.b8.b3.ab

    これで根本的解決になるか判らないので引き続きコメント欄。

    p.s.
    =やdoに関してはこちらの勘違いです。スミマセン。
  • id:tyn
    変数が展開されていなかったようです。''で全部囲わないといけないと思っていました。

    ポイントの消費についてはあまり気にしていないので、また回答して頂ける事があれば回答欄にも記入してください。

    それでは、コメント有難うございました。
  • id:kn1967
    あえて、追記するとすれば
    最初からコントローラのほうも記述しておいて欲しかった・・・って所でしょうか。
    (質問文の文字数制限が厳しいようなので、面倒だとは思いますがコメント欄併用で。)

    それ以外、特に追記も思いつきませんし、私もポイントは差ほど気にしてませんので、
    締め切りして放置でも、キャンセルでもどちらでも結構です。
  • id:kn1967
    既に新しい質問をされておられたようで、
    コードを記述するって点は既に対応しておられましたね。失礼しました。

    私ばかりが回答するのもどうかと思って回答は控えてますが、
    ヒントとしては
    ・draggable_element はエレメントそのものに対して、
    ・sortable_element は親エレメントに対して
    それぞれ指定します。
    つまり、現状のように li を page の末尾にただ足しただけだと・・・
    ul の子要素として li を追加するようにコントローラを書き直してみてください。
  • id:tyn
    pageは、page.insert_html :bottom, 'fs_items_box_1' より<ul id="fs_items_box_1">要素で、その子要素に<li>が追加されるコードになっていると思っていました。

    pageが<ul id="fs_items_box_1">要素以外、もしくは:bottom指定では子要素に追加されないと考えればよいのでしょうか?

    重ね重ね質問してすいません。。
  • id:kn1967
    ん? 入ってる?
    私は連日、ボケボケのコメントをしてるようだ。
    ちょっと休まないといけないな。

    <%= sortable_element 'fs_items_box_1' %>

    <>はコメント欄用に全角。

  • id:tyn
    すいません、<%= sortable_element 'fs_items_box_1' %> は質問欄に書き忘れていました。実際のコードには入っています。
  • id:kn1967
    ちょっと、記述方法が違いませんか?
  • id:tyn
    sortable_elementを指定した部分テンプレートを記述するか、page.sortableをコントローラに書くとソートできるようになりました。
    色々疑問に答えて頂きありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません