【问题标题】:Passing user_id, site_id, and question_id to same table on create在创建时将 user_id、site_id 和 question_id 传递给同一个表
【发布时间】:2010-05-20 06:08:58
【问题描述】:

我似乎无法弄清楚如何做到这一点。我正在尝试将四个不同的变量传递给一个表。更具体地说,我试图在一个喜欢表中创建一个“喜欢”,该表还捕获 site_id(如答案)、user_id 和 question_id。这是设置。

class Like < ActiveRecord::Base
  belongs_to :site
  belongs_to :user
  belongs_to :question
end

我不会反过来说,has_many 关联,但它们就在那里。这是我认为问题所在的喜欢控制器。

class LikesController < ApplicationController

  def create
    @user = current_user
    @site = Site.find(params[:site_id])
    @like = @site.likes.create!(params[:like])
    @like.user = current_user
    @like.save

    respond_to do |format|
     format.html { redirect_to @site}
     format.js
     end
  end
end

此代码成功传递了like 和site_id,但经过许多不同的尝试后,我无法让它传递问题ID。这是我的表格:

/views/sites/_site.html.erb(虽然部分显示在 /views/questions/show.html.erb 文件中)。

<% remote_form_for [site, Like.new] do |f| %>
        <%= f.hidden_field :site_name, :value => "#{site.name}" %>

        <%= f.hidden_field :ip_address, :value => "#{request.remote_ip}" %>
        <%= f.hidden_field :like, :value => "1" %>
        <%= submit_tag "^" , :class => 'voteup' %>
    <% end %>

【问题讨论】:

  • 我建议你不要在表单中传递 request.ip_address,而是在控制器中获取它,因为它可能容易被伪造

标签: ruby-on-rails ruby associations


【解决方案1】:
<%= f.hidden_field :question_id, :value => params[:id] %> 

<%= f.hidden_field :question_id, :value => @question.id %> 

在您的表单中尝试这一行,正如您所说的,您在问题的显示页面中,params[:id] 将具有问题的 id。

如果我误解了你的问题,请告诉我。

【讨论】:

    【解决方案2】:

    您的remote_form_for 中似乎没有您的question_id 的输入。对吗?

    如果是这样,您需要将当前问题传递给您的remote_form_for,或者明确包含一个隐藏字段来存储您的 question_id。

    例如:

    <% remote_form_for [@question, site, Like.new] do |f| %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 2021-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多