Ruby on Rails と jeditable (jquery)
-
03-07-2019 - |
質問
誰かがjqueryプラグインを入手しましたか 冗談っぽい Rails アプリケーションで適切に実行するために。もしそうなら、設定方法についてヒントを教えていただけますか?「submit-url」の作成に問題があります。
IIRC さん、JavaScript 内から単純に Ruby コードを呼び出すことはできません (誤解させてください:-)。RJSのことですか?それはプロトタイプに限ったことではないでしょうか?jQueryを使っています。
アップデート:
ええと...しばらく前にこれを質問しましたが、その間に別のソリューションに切り替えました。しかし、IIRC の私の主な問題は次のとおりでした。
RESTful リソースを使用しています。したがって、ブログをモデル化する必要があり、リソース「投稿」があるとします。投稿を編集したい場合 (例:ID 8 の投稿)、更新は HTTP 経由で URL に送信されます http://my.url.com/posts/8 HTTP 動詞 POST を使用します。ただし、この URL は私の Rails コードで構築されています。では、submit-url を jQuery コードに取り込むにはどうすればよいでしょうか?これは RESTful コードであるため、更新 URL は投稿ごとに変わります。
解決 2
これを今だけ取り上げてすみませんが、コードをもう一度調べる時間を見つけました。私は次のjavascript(レール内のapplication.js)で問題を解決したと思います:
jQuery(document).ready(function($) {
$(".edit_textfield").each( function(i) {
$(this).editable("update", {
type : 'textarea',
rows : 8,
name : $(this).attr('name'),
cancel : 'Cancel',
submit : 'OK',
indicator : "<img src='../images/spinner.gif' />",
tooltip : 'Double-click to edit...'
})
});
});
コントローラーURLがRESTfulであれば、これは機能します。
他のヒント
JEditable(1.6.2)と落ち着いたRailsアプリ(2.2.2)の接続方法は次のとおりです。
インラインフォーム:
<div id="email_name"><%= h( @email.name ) %></div>
$('#email_name').editable( <%= email_path(@email).to_json %>, {
name: 'email[name]',
method: 'PUT',
submitdata: {
authenticity_token: <%= form_authenticity_token.to_json %>,
wants: 'name'
}
});
コントローラー:
def update
@email = Email.find( params[:id] )
@email.update_attributes!( params[:email )
respond_to do |format|
format.js
end
end
update.js.erb
<%=
case params[:wants]
when 'name' then h( @email.name )
# add other attributes if you have more inline forms for this model
else ''
end
%>
このswitchステートメントには少し不格好です。 ajaxリクエストが成功し、何も返されなかった場合、デフォルトでJEditableが送信された値を保存するだけでいいと思います。
htmlに.jsファイルを含める場合はnoですが、ビューテンプレートにjsインラインがある場合はyesにできます。
jsビューである.erb.jsファイルを持つこともできます。
何でも可能:D
私はあなたが抱えている問題を完全に理解しているとは思いませんが、javascriptに次のようなものを入れることができると思います:
<%= url_for(@post) %>
javascriptの構造、ファイルの編成方法などによって異なります...
コントローラーが少し落ち着かない場合は。特に、特定のフィールドを更新するアクションがある場合、これも同様に機能します。重要なのは、認証トークンを渡すことです。
インデックス.html.erb
<span id="my_edit"><%= foo.bar %></span>
<script type="text/javascript">
$(document).ready(function() {
$("#my_edit").editable('<%= url_for(:action => "update_bar",
:id => foo) %>',
{
method: 'PUT',
cancel : 'Cancel',
submit : 'OK',
indicator : "<img src='../images/spinner.gif' />",
tooltip : 'Double-click to edit...',
submitdata: {
authenticity_token: <%= form_authenticity_token.to_json %>,
}
}
});
</script>
単純化しすぎたコントローラーは、安静でないことを正当化できません:
foo_controller.rb
def update_bar
foo = Foo.find(params[:id])
bar= params[:value]
// insert justifiable code here
foo.save
render :text=>params[:value]
end
(Jeditable 1.7.0 および jRails 0.4 を備えた Rails 2.2.2 および 2.3.2 で動作しますが、ここでは jRails は jQuery 1.5 のインクルードを提供する以外はあまり対話しません)