Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql rails-已选择关联参数,但“参数”;改变;坚持_Mysql_Ruby On Rails_Ruby On Rails 4_Activerecord_Associations - Fatal编程技术网

Mysql rails-已选择关联参数,但“参数”;改变;坚持

Mysql rails-已选择关联参数,但“参数”;改变;坚持,mysql,ruby-on-rails,ruby-on-rails-4,activerecord,associations,Mysql,Ruby On Rails,Ruby On Rails 4,Activerecord,Associations,我真的不知道如何描述这个问题,我以前从未遇到过这样的问题。我正试图建立一个“has_many:through”协会来处理一个团体的会员请求。其他操作(销毁、更新)似乎工作正常。每当我在我的控制器中启动创建操作时,对象都会显示它正在被传递正确的参数,并且关联已创建。但是,它只创建了一个与id为“1”的组的关联。我不知道如何清楚地解释或解决这个问题。我将在下面发布我的日志和代码 澄清我的问题:为什么数据在持久化到数据库时(在创建时)会“更改” Cliqs=组 日志: 控制器操作: def creat

我真的不知道如何描述这个问题,我以前从未遇到过这样的问题。我正试图建立一个“has_many:through”协会来处理一个团体的会员请求。其他操作(销毁、更新)似乎工作正常。每当我在我的控制器中启动创建操作时,对象都会显示它正在被传递正确的参数,并且关联已创建。但是,它只创建了一个与id为“1”的组的关联。我不知道如何清楚地解释或解决这个问题。我将在下面发布我的日志和代码

澄清我的问题:为什么数据在持久化到数据库时(在创建时)会“更改”

Cliqs=组

日志:

控制器操作:

def create
    @cliq = Cliq.find_by(params[:cliq_id])
    @cliq_request = current_user.cliq_requests.new(cliq: @cliq)

    if @cliq_request.save
        redirect_to cliqs_path
    else
        redirect_to current_user
    end 
end
其他措施(以防万一):

模型:

class User < ActiveRecord::Base
has_one :owned_cliq, foreign_key: 'owner_id', class_name: 'Cliq', dependent: :destroy

has_many :cliq_memberships, dependent: :destroy
has_many :cliqs, through: :cliq_memberships

has_many :cliq_requests, dependent: :destroy

end

class Cliq < ActiveRecord::Base
belongs_to :owner, class_name: 'User'

has_many :cliq_memberships, dependent: :destroy
has_many :members, through: :cliq_memberships, source: :user

has_many :cliq_requests, dependent: :destroy                                
has_many :pending_members, through: :cliq_requests, source: :user, foreign_key: 'user_id'
end

class CliqRequest < ActiveRecord::Base
#from
belongs_to :user
#to
belongs_to :cliq

def accept
    cliq.members << cliq.pending_members.find(user_id)
    destroy
end
end
class用户
Cliq请求:
    :put%> :删除%>

当你发现你自己时,使用
@cliq=cliq.find_by(id:params[:cliq_id])
可以工作,而
@cliq=cliq.find_by(params[:cliq_id])不能工作。那么为什么会这样呢

find_by
方法根据条件匹配。使用
find_by
,可以匹配任何属性。例如,这也会起作用:

@cliq=cliq.find_by(some_属性:“foo”)

因此,使用
find_by
,您必须指定
id
属性,以便查询返回正确的记录。您的
find_by
查询实际上运行的SQL如下所示:

SELECT  `cliqs`.* FROM `cliqs` WHERE (2) LIMIT 1
select语句将返回整个表,
LIMIT 1
只抓取第一条记录

作为奖励,rails基于
参数[:cliq_id]
分配
@cliq
的首选方式是使用
查找
,它使用主键搜索记录:


@cliq=cliq.find(params[:cliq\u id])

在create方法中赋值后,尝试使用byebug检查
@cliq
。它的id是什么?奇怪的是我只是觉得我把它修好了。让我知道您对此的想法:我将更新操作中查找Cliq的代码更改为“Cliq=Cliq.find_by(id:params[:Cliq_id]),而不是“Cliq=Cliq.find_by(params[:Cliq_id])”。为什么会这样?我会包括一个答案,一秒钟!好的,我明白了。我这样做只是为了清晰,它似乎也更清晰。非常感谢你的解释!一个被接受的答案,一张给你的选票,格伦·科科!你去格伦可可!
class User < ActiveRecord::Base
has_one :owned_cliq, foreign_key: 'owner_id', class_name: 'Cliq', dependent: :destroy

has_many :cliq_memberships, dependent: :destroy
has_many :cliqs, through: :cliq_memberships

has_many :cliq_requests, dependent: :destroy

end

class Cliq < ActiveRecord::Base
belongs_to :owner, class_name: 'User'

has_many :cliq_memberships, dependent: :destroy
has_many :members, through: :cliq_memberships, source: :user

has_many :cliq_requests, dependent: :destroy                                
has_many :pending_members, through: :cliq_requests, source: :user, foreign_key: 'user_id'
end

class CliqRequest < ActiveRecord::Base
#from
belongs_to :user
#to
belongs_to :cliq

def accept
    cliq.members << cliq.pending_members.find(user_id)
    destroy
end
end
<h1><%= @cliq.name %></h1>

<%= link_to 'Request to join Cliq', cliq_cliq_requests_path(@cliq, @cliq_request), :method => :post %>

<% @cliq_members.each do |cliq_member| %>
<ul><%= link_to cliq_member.username, user_path(cliq_member) %></ul>
<% end %>


<h3>Cliq Requests:</h3>

<ul>
<% @cliq.pending_members.each do |pending_member| %>
<%= link_to pending_member.username, user_path(pending_member) %>
<% end %>
<% @cliq.cliq_requests.each do |cliq_request| %>
<%= link_to "Accept", cliq_cliq_request_path(@cliq, cliq_request), :method => :put %>
<%= link_to "Deny", cliq_cliq_request_path(@cliq, cliq_request), :method => :delete %>
</ul>
<% end %>
SELECT  `cliqs`.* FROM `cliqs` WHERE (2) LIMIT 1