Is a link_to a custom route or a form the best way to provide state change?
<p>What is the 'Rails way' to provide access to methods such as the following from a view</p>

<pre><code>def approve!
  self.update_attribute status, 'approved'
end
</code></pre>

<p>Is it best to create a link to a custom route</p>

<pre><code>&lt;%= link_to 'Approve', approve_object_path(@object) %&gt;

#objects_controller.rb
def approve
  @object.approve!
end
</code></pre>

<p>Or to create an update form</p>

<pre><code>&lt;%= simple_form_for @object do |f| %&gt;
  &lt;%= f.input :status, input_html { value: 'approved' }, as: :hidden %&gt;
  &lt;%= f.submit %&gt;
&lt;% end %&gt;
</code></pre>

<p>On the one hand, using a form and not using the <code>approve!</code> method at all seems to align better with restful routes.</p>

<p>On the other hand, a link to a custom route seems to provide less opportunity for submitted values to be manipulated by the user, and also requires less code to implement.</p>

<p>Which is the preferred way to do this?</p>