Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/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/5/ruby-on-rails-4/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
Ruby on rails Rails 4有一个更新_Ruby On Rails_Ruby On Rails 4_Has One - Fatal编程技术网

Ruby on rails Rails 4有一个更新

Ruby on rails Rails 4有一个更新,ruby-on-rails,ruby-on-rails-4,has-one,Ruby On Rails,Ruby On Rails 4,Has One,我的应用程序上的“有一个”关联有点问题 我想要实现的是能够附加一个可选的引用主题。引用只能使用一次(换句话说,如果用于主题1,则不能用于任何其他主题) 我有一个主题模型和一个报价模型。 这个话题只有一句话。 引用属于主题 我还希望能够附加一个报价到其他模型(例如配置文件模型) 我真的很困惑在我的“编辑主题”视图和控制器中该做什么。我认为它会像一个“一对多”的关联一样工作,配置起来没有问题。不知怎的,“有一个”更复杂(对我来说!) 我想要的是在“编辑主题”中查看可用报价的广播列表,我可以自由更新这

我的应用程序上的“有一个”关联有点问题

我想要实现的是能够附加一个可选的引用主题。引用只能使用一次(换句话说,如果用于主题1,则不能用于任何其他主题)

我有一个主题模型和一个报价模型。 这个话题只有一句话。 引用属于主题

我还希望能够附加一个报价到其他模型(例如配置文件模型)

我真的很困惑在我的“编辑主题”视图和控制器中该做什么。我认为它会像一个“一对多”的关联一样工作,配置起来没有问题。不知怎的,“有一个”更复杂(对我来说!)

我想要的是在“编辑主题”中查看可用报价的广播列表,我可以自由更新这些报价。(与“新主题”视图相同)

我当前的控制器:

 def edit
  @topic = Topic.find(params[:id])
  @quote = @topic.quote
  @packages = @topic.packages
  @books = @topic.books
  @tasklists = @topic.tasklists
  @links = @topic.links
  @terms = @topic.terms
end

def update
  @topic = Topic.find(params[:id])
  if @topic.update_attributes(topic_params)
    flash[:success] = t('helpers.success-update', model: "topic")
    redirect_to backend_topics_url
  else
    render partial: 'edit'
  end
end

def topic_params
  params.require(:topic).permit(:topic_id, :theme_id, :cover, :topic_status, :topic_access, :slug, *Topic.globalize_attribute_names, :quote_attributes => [:id, :topic_id], :package_ids => [], :book_ids => [], :link_ids => [], :tasklist_ids => [], :term_ids => [])
end
我当前的主题模型:

has_one :quote
accepts_nested_attributes_for :quote
我当前的报价模式:

belongs_to :topic
和我的“编辑主题”视图:

Quote
当前报价
Quote.all,:label\u method=>:Quote,:label\u value=>:id,:checked=>@Quote.id,as::单选按钮%>
我肯定我遗漏了一些明显的东西,但我不知道是什么

有什么想法吗

谢谢!
-Vincent

首先,如果您希望报价属于多个模型,则需要多态关联。否则,您将需要添加多个外来id以引用如下内容:topic\u id、profile\u id等,这将很快变得混乱。您可以在此处查看有关多态性的屏幕广播:

has_one and behing_to与has_many and behing_to基本相同,只是您只处理一条记录,而不是一组记录

对于当前设置-在编辑操作中,需要获取与任何主题都不关联的所有引号。您可以这样做:

@available\u quotes=Quote.where(主题id:nil)

然后:

  <%= f.input :quote, :collection => @available_quotes, :label_method => :quote, :label_value => :id, :checked => @quote.id, as: :radio_buttons %>
@available\u quotes,:label\u method=>:quote,:label\u value=>:id,:checked=>@quote.id,as::单选按钮%>
而不是

Quote.all
在返回所有引号的表单中

如果您移动到多态模型,请观看屏幕广播,然后将屏幕广播中的“可评论”id替换为类似“可引用”id的内容,然后在编辑操作中查找未分配的引号,您可以执行以下操作:


@quotes=Quote.where(quotable\u id:nil)

如果一个Quote只能用于一个主题,那么
没有“一个:主题”
?您使用的是Rails 4吗?尝试f.collection\u单选按钮(:quote,:topic\u id,@available\u quotes,:id,:quote\u name)是的,我尝试了,但它抛出了一个错误(未定义的方法合并)。我想我在其他地方遗漏了更明显的东西。我一直在仔细检查控制员或我的表格上的许可证部分,但没有弄清楚。令人沮丧,但还是要谢谢你!经过几个小时的代码挖掘,我仍然无法找出问题所在。基本上,我想做的就是能够在主题中添加一个引用,也可以在引用中添加一个主题。我设法毫无问题地完成了我的工作。反之则更为微妙。它需要将当前主题设置为空,并在选定新主题的情况下分配新id。我知道我在嵌套表单、强参数或更新(是否需要构建关联?)方面做了一些错误。我可以与多对多协会合作。为什么这不起作用?挫败
  <%= f.input :quote, :collection => @available_quotes, :label_method => :quote, :label_value => :id, :checked => @quote.id, as: :radio_buttons %>