前提・実現したいこと
画面上で
未完成、完成をupdateを使って切り替えられるようにしたいです。
:idをどうやったら持たせて、updateを行えますか?
発生している問題・エラーメッセージ
No route matches {:action=>"update", :controller=>"microposts", :id=>nil}, missing required keys: [:id]
該当のソースコード
view index
ruby
1<% provide(:title, 'All users') %> 2<h1>All microposts</h1> 3 4<h2>検索</h2> 5<%= form_tag microposts_path, :method => 'get' do %> 6 <p> 7 <%= text_field_tag :search, params[:search] %> 8 <%= submit_tag "Search", :name => nil %> 9 </p> 10<% end %> 11 12 13<%= paginate @microposts %> 14<ul class="microposts"> 15 <%= render @microposts %> 16 17 18</ul>
view render
ruby
1<%= form_for(@micropost, url: micropost_path(@micropost), html: {method: "patch"}) %> 2 3 4 <% if micropost.flag == 0 %> 5 <%= hidden_field_tag :flag, 1 %> 6 <%= submit_tag "未達成", :name => nil %> 7 <% else %> 8 <%= hidden_field_tag :flag, 0 %> 9 <%= submit_tag "完了", :name => nil %> 10 <% end %>
controller
ruby
1def update 2 @micropost = Micropost.find(params[:id]) 3 if @micropost.update_attributes(micropost_params) 4 flash[:success] = "updated" 5 redirect_to @microposts 6 else 7 render 'home' 8 end 9 end
routes
ruby
1resources :microposts, only: [:create,:destroy,:index,:edit,:update]
試したこと
ruby
1<%= form_for(@micropost, url: micropost_path(@micropost), html: {method: "patch"}) %>
この記述方法を変えて、idを持たせることができれば変えられると
考えてそのやり方を調べたのですが、見つかりませんでした。
エラーメッセージで検索もしたのですが、
controllerのコードですが、updateでなくviewに該当するメソッド(editですかね...?)を提示してほしいです。
edit は作ってないです!
一つのviewのなかで、todoアプリみたいに、完了、未完了を1clickで変更できるようにしたいです!
お願いします!
えーと、editがあるかどうかの話ではなくて、viewに該当するメソッド部分を提示してほしいという話です。
これですかね?
def index
if params[:search] == nil
@microposts = Micropost.page(params[:page]).per(10)
else
search = params[:search]
@microposts = Micropost.where(['name LIKE ?', "%#{search}%"]).page(params[:page]).per(10)
end
end
質問自体を修正してください
回答1件
あなたの回答
tips
プレビュー