添加字段以在控制器中创建操作

时间:2014-03-20 19:17:24

标签: ruby-on-rails ruby-on-rails-4

我有一张表格可以投票给你最喜欢的图片:

<%= form_for(@imagevote) do |f| %>
  <% @miniature.collections(:photo).each do |collection| %>

    <% if collection.photo.exists? %>

        <%= link_to image_tag(collection.photo.url(:thumb), :retina => true), collection.photo.url(:original), :retina => true, :class => "image-popup-no-margins" %>
        <%= f.radio_button(:collection_id, collection.id) %>
    <% end %>
  <% end %>
    <%= f.hidden_field :voter_id, :value => current_user.id %>
    <%= f.hidden_field :miniature_id, :value => @miniature.id %>
    <%= f.submit "Vote", class: "btn btn-large btn-primary" %>
<% end %>

然后,我想添加collumn :voted_id的值,该值应该是获得投票的collection.user的ID。

我无法解决如何在我的控制器中执行此操作。

我目前拥有什么

def create
        @imagevote = Imagevote.new(imagevote_params)
        @collection = Collection.find(params[:collection_id])
        @imagevote.voted_id = @collection.user_id
        if @imagevote.save
            flash[:success] = "Vote registered"
            redirect_to :back
        else
            flash[:success] = "Vote not registered"
            redirect_to :back
        end
    end

这给了Couldn't find Collection without an ID。该表单清楚地提交了一个collection_id,我试图使用它来查找该集合,以便我可以使用该集合user_id并将其传递给新模型创建。

我相信我的:voted_id中不应该imagevote_params,因为它不是由用户提交的。

伊克。

更新:这是我当前的日志

开始POST&#34; / imagevotes&#34;对于2014.0-20 19:32:20 +0000的127.0.0.1 由ImagevotesController处理#create as HTML   参数:{&#34; utf8&#34; =&gt;&#34;✓&#34;,&#34; authenticity_token&#34; =&gt;&#34; 2FU9X / VJ40UnH70QPy / Iq0Voqo58p5KdcD1B0Q5st0c =&#34;, &#34; imagevote&#34; =&gt; {&#34; collection_id&#34; =&gt;&#34; 3&#34;,&#34; voter_id&#34; =&gt;&#34; 4&#34 ;,&#34; miniature_id&#34; =&gt;&#34; 10&#34;},&#34;提交&#34; =&gt;&#34;投票&#34;}   用户负载(0.3ms)SELECT&#34;用户&#34;。* FROM&#34;用户&#34;用户&#34;。&#34; id&#34; = 4 ORDER BY&#34;用户&#34;。&#34; id&#34; ASC限制1 已完成404未在4毫秒内找到

ActiveRecord :: RecordNotFound(无法找到没有ID的集合):   app / controllers / imagevotes_controller.rb:17:在'create&#39;

1 个答案:

答案 0 :(得分:1)

:collection_id:imagevote的一部分。

您可以从params哈希中访问:collection_id,如下所示:

 @collection = Collection.find(params[:imagevote][:collection_id])

而不是

@collection = Collection.find(params[:collection_id])