ruby on rails自定义action for form

时间:2017-05-26 20:14:23

标签: ruby-on-rails routes form-for

我正在尝试使用form_for进行自定义操作。我的代码现在不会导致任何错误,它只是没有做任何事情。我已经坚持了一段时间,任何帮助都会很棒:)

的routes.rb

 resources :posts do
     member do
     patch :confirm
   end
 end

_feed.html.erb

<% if @feed.any? %>
  <% @feed.each do |feed| %>

  <span class="props_form">
  <form class="form-inline">

    <%= form_for @post, url: confirm_post_path(feed), method: :patch do |f| %>
                <div class="form-group">
                  # form fields
                <div class="form-group">
            <%= f.submit "Confirm", class: "btn-primary btn-xs form-control" %>
                </div>
    <% end %>

  </form>
  </span>

posts_controller.rb

def confirm
    @post = Post.find_by(id: params[:id])
    @post.toggle!(:confirm)
    @post.save
    redirect_to root_url
end

pages_controller.rb

def home
  if logged_in?
    @feed = current_user.feed.paginate(page: params[:page])
  end
end

model user.rb

def feed
  Post.where("user_id = ?", id)
end

1 个答案:

答案 0 :(得分:0)

在_feed.html.erb中,您使用的是嵌套表单(表单标记中的表单标记),因此不会生成以erb编写的内部表单。 而且我不明白为什么你在@post上使用form_for。 这是我的解决方案。

_feed.html.erb

<% if @feed.any? %>
    <% @feed.each do |feed| %>
        <span class="props_form">
            <%= form_tag confirm_post_path(feed), class: 'form-inline', method: :patch do |f| %>
                <div class="form-group">
                # form fields
                <div class="form-group">
                <%= submit_tag "Confirm", class: "btn-primary btn-xs form-control" %>
                </div>
            <% end %>
        </span>
    <% end %>
<% end %>