提交参数不正确

时间:2014-03-20 16:33:14

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

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

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

        <% if collection.photo.exists? %>
          <td><div class="photo1">

         <%= 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) %>
    <%= f.hidden_field :voter_id, :value => current_user.id %>
    <%= f.hidden_field :voted_id, :value => collection.user_id %>
    <%= f.hidden_field :miniature_id, :value => @miniature.id %>

         <p>Painted by <%= link_to collection.user.name, collection.user %></p>
             </div></td>
        <% end %>
      <% end %>
      <%= f.submit "Vote" %>
    <% end %>

所有内容都正确提交,但hidden_field :voted_id除外,current_user.id由于某种原因重复:voted_id

更新

我尝试以其他用户身份登录,似乎current_user.id没有重复:voted_id,而是它总是“7”,这是:我之前用来测试它的user_id 。现在以4号用户身份登录,它仍然以7发送<%= link_to "See more and change your vote.", edit_imagevote_path(:miniature_id => @miniature, :voter_id => current_user.id) %> 。我迷路了。

imagevotes视图的链接如下:

class ImagevotesController < ApplicationController

    respond_to :html, :js

    def new
        @imagevote = Imagevote.new
        @miniature = Miniature.find(params[:miniature_id])
    end

    def edit
        @imagevote = Imagevote.find_by_miniature_id_and_voter_id(params[:miniature_id],params[:voter_id]) 
        @miniature = Miniature.find(params[:miniature_id]) 
    end

    def create
        @imagevote = Imagevote.new(imagevote_params)
        if @imagevote.save
            flash[:success] = "Vote registered"
            redirect_to :back
        else
            flash[:success] = "Vote not registered"
            redirect_to :back
        end
    end

    def update
        @imagevote = Imagevote.find(params[:id])
        if @imagevote.update_attributes(imagevote_params)
            flash[:success] = "Vote changed."
            redirect_to :back
        else
            redirect_to :back
        end
    end

    private

    def imagevote_params
      params.require(:imagevote).permit(:collection_id, :voter_id, :voted_id, :miniature_id)
    end
end

这是我的图像投票控制器

{{1}}

2 个答案:

答案 0 :(得分:1)

您只有一个@imagevote对象,但是您正在输出集合循环中的隐藏字段,因此您将在模型中引用相同属性的多个字段:如果您检查生成的html ,您应该看到多个具有相同name属性的隐藏字段。

浏览器处理具有相同名称的多个输入的方式意味着:voted_id的参数将始终是最后一个集合中的:user_id

答案 1 :(得分:0)

很难说,因为你没有提供你的模型,你的循环代码被剥离了。

我猜你会绕过属于collection的{​​{1}}。在这种情况下,current_user始终与current_user.id相同。您可能希望看到collection.user_id