質問: Question.find(params[:question_id]) if @question.update(is_solved: true) // end respond_to do |format| format.html{render :show} format.js{} end end # 略 end ``` `views/questions/show.html.erb` ``` # 略 <%= render :partial=>'make_resolved' , locals: {question: @question} %> ``` `views/questions/_make_resolved.html.erb` ``` <%= link_to(question.is_solved ? '解決済み':'受付中',{controller: :questions,action: :make_resolved, question_id: @question.id, remote: true}) %> ``` `views/questions/make_resolved.js.erb` ``` $("#ajax_button").children().remove(); $("#ajax_button").append('<%= escape_javascript render :partial => "make_resolved" ,locals: {question: @question},:layout => false %>'); ``` 説明が分かりづらい点もあるかもしれませんが、よろしくお願いします。
回答: 初心者マークがついていませんが解説します。 まず基本的なことから、RubyonRailsのwebアプリは下記の4つから構成されます。 * html5=>HyperText Markup Languageインターネットの黎明期に学者が論文を共有するために作られた言語で、で要素を管理する、それのversion5、デスクトップアプリに劣らないUIを備えた最新のもの * RubyonRails=>webフレームワークの一つ、データ(DB)とユーザーからのアクションを結びつけhtmlを作成する。 * javascript=>webブラウザ上で動作する、軽量言語webブラウザ上で完結した動作をしたりwebフレームワークの動きを助けデータをやりとりしたりする * stylesheet=>htmlにもデザインの機能はあるが、それを分離し、構造化したもの、通常、htmlのtagのclassやidを頼りにデザインを適用する。 web開発をしっかりやろうと思ったら最低限これら4つを勉強しないといけません。 で、以上を踏まえるとまず、質問のタグはRubyやRuby on Railsではありません。 html CSS等で質問するべきです。 ... ... を何にすべきかわからないとありますが、当たり前です。 CSSに自分でこのclassの時はこの色にすると指定してそれを読み込み 適用するからです。 bootstrapのようなフロントエンドWebアプリケーションフレームワークを適用していれば、 class名だけで変化をつけられますが、基本的にcssを勉強して自分でやルものだと御考えください。 また、 ``` <%= link_to(question.is_solved ? '解決済み':'受付中',{controller: :questions,action: :make_resolved, question_id: @question.id, remote: true}) %> ``` の記述も問題です。 このままでは、is_solvedによって、メッセージしか変化しませんしclass等が変化するようにしないとcssが適用されません。そもそも、解決済みなのにリンクが推せるって...。 しかし、今回の場合だけ、上記の学習をすっ飛ばしてやる方法があります。 ``` <%= link_to(question.is_solved ? '解決済み':'受付中',{controller: :questions,action: :make_resolved, question_id: @question.id, remote: true},question.is_solved ? :style=>"color:red":style=>"color:black") %> ``` しかし、これより踏み込んだデザインにするには、基礎からしっかり学ぶ必要があります。 RubyonRailsは乗っけは本当に簡単ですが、細かくカスタマイズして想像通りの物を作るには やはり多岐にわたる知識と技術が必要です(それでも他のフレームワークよりだいぶ簡単ですが...) 頑張ってください。