2009-11-11 4 views
0

이것은 매우 어리석은 질문이지만 마감일이 있으며 매우 긴장되며 모든 것을 시도했습니다. 사실 그것은 잠깐 근무했지만 뭔가를 망가 뜨 렸을 것입니다.값을 true로 대체하고 나머지를 false로 설정하면

다른 추천 기능을 사용하려고 할 때마다 기본 기능 항목을 덮어 쓰고 싶습니다. 전에 오류가 있었지만 오류가 나는 것을 원하지 않습니다. 단지 모든 것을 false로 설정하고이 앱을 true로 설정하기를 원합니다.

저장하기 전에 이름이 지정된 범위를 저장/업데이트 한 후 각각을 하나씩 거짓으로 매핑 한 다음 저장하여 기능이 변경되었는지 여부를 확인했습니다. 모든 부분이 올바르게되어 있다고 생각하지만 할 수 있습니다. 그들을 함께 모으지 마라. 도와주세요 제발 :(

을 어쩌면이에 대한 빠른 검증있다, 잘 모르겠어요

나는 만 다른 것을 시도했기 때문에 내가 코드를 자세히 설명 할 수없는

.

가있다 다른 항목이 기능하는 경우 is_featured 호출되는 항목에 부울 설정. 당신이 항목을 만들 때

, 당신은이 기능 여부되도록 설정할 수 있습니다. 데이터베이스에서

는 이러한 제로 아웃한다 , 그리고 그냥 너였던 아이템 pdated 또는 특색 짓기 위하여 창조 된 것은 진실해야한다.

내가 가진 모델이 시도 전/후/생성/업데이트 및에 또한 CONTROLER을 저장하고

파인하지 않는 이유는 이드 on't 알고있는 내 바보 같은 코드의 일부를 추가합니다 업데이트 컨트롤러의

작동 :

if params[:app][:is_on_front_page] == true 
App.all.map{|m|(m != @app) ? m.is_on_front_page = true : m.is_on_front_page = false} 

단부

또는

,
named_scope :is_on_front_page, :conditions => { :is_on_front_page => true } 
    after_update do 
    if self.is_on_front_page.changed? and App.is_on_front_page.count >= 1 
    App.all.map{|m| m.is_on_front_page = false;m.save} 

    end 
    is_on_front_page = true 
    save! 
    end 

하지만 나 저장하거나 때문에 명명 된 범위

+0

당신은 몇 가지 세부 사항을 제공해야합니다. 예를 들어, 항목은 어떻게 표시됩니까? – cgr

+0

일부 코드로 자세히 설명해 주시겠습니까? – Chirantan

답변

1

트랜잭션에서 모두를 false로 설정하고 참 (특색)하려는 레코드를 업데이트하십시오. 이는 레코드를 쉽게 삭제하고 업데이트를 업데이트하는 방법과 비슷합니다. 즉, 다음과 같이 쉽게 할 수 있습니다.

tranasction do SomeModel.delete_all items.each {| i | SomeModel.create (i)} end

SomeModel을 반복하면서 find()를 수행하고 특정 속성을 업데이트하는 것이 더 쉬울 수 있습니다.

귀하의 경우에는 모든 레코드를 NOT 기능으로 표시 한 다음 레코드를 수동으로 전환하지 않고 기능으로 원하는 것을 업데이트하기 만하면됩니다. 이 같은

시도 뭔가 :

after_create :set_as_featured 

def set_as_featured 
self.class.transaction do 
    self.connection.execute("UPDATE foo SET featured=0") 
    self.update_attribute(:featured, true) 
end 
end 
+0

그게 내가하려고했던거야! 그것은 작동하지 않았다! 내 코드를 참조하십시오. 저장 후나 변경 전에 변경되었는지 확인한 다음 모든 항목을 삭제하고 curernt 항목을 true로 설정해야합니다. 왜 작동하지 않는지 모르겠다. –

+0

@stacia - 내 업데이트 된 항목을 참조하십시오. 기본적으로 다른 모든 것을 지우는 콜백을 사용하고 새로 생성 된 레코드를 추천대로 설정합니다. –

+0

왜 작동하지 않습니까 ??? if @ app.is_on_front_page_changed? == true App.is_on_front_page.map {| m | m.is_on_front_page = false} end –

1
if params[:id] # or however you're setting the overridden featured item 
    @feature = Feature.find(params[:id]) 
else 
    @feature = Feature.default # make a self.default method that returns the default 
end 

의 날 무한 루프에 들어갔거나 고함 당신이 무엇을 필요가 못하게? 추천 상품을 선택 하시겠습니까?

내가 원하는 것을 정확히 모르겠습니다. 유효성 검사는 무언가를 저장하는 것이므로 어떤 것이 '특색 지어 지는지'는 확실하지 않습니다. 설명을위한 설명이 도움이 될 것입니다.

before_create 또는 before_update hook은 뭔가 제공되지 않았을 때 기본값을 설정하는 곳이 될 것이지만 그 이상의 경우 사용자의 세부 사항에 대한 약간의 지침이 필요합니다.

+0

10 가지 항목이 있다고 가정 해 보겠습니다. 어쩌면 아이템 2가 이미 등장했을 것입니다. 새 항목을 만들 때 모든 항목 (실제로는 항목 2가 필요하지만 지금은 하나 이상의 기능이 있으므로 계속 유지할 것입니다)이 거짓으로 설정되고 항목/변경/업데이트되어 true로 설정됩니다. 말이 돼? –

+0

다른 답변보기 너의 골목이 더 가깝다고 생각해. 나는 이것을 후세에게 남겨두고있다. – wesgarrison

0

좋아, 나는 당신이 말하는 것을 얻은다고 생각하기 때문에 별도의 답변을 추가하고 있습니다.

항목 목록이 있으며 그 중 하나를 추천하고 싶습니다. 누군가는 추천 대상을 골라 낼 수 있지만, 그렇지 않은 경우에는 기본적으로 추천되는 대체 항목이 있습니다.

상점에 has_many : items가있는 경우 상점에 "featured_item_id"속성을 입력하고 featured_id를 저장할 수 있습니다. 기본값을 설정해야하는 경우 "default_item_id"를 추가하고 기본값을 설정하십시오.당신을 당신이 주요 항목으로 항목을 설정하면

def featured 
    if self.featured_item_id 
    self.featured_item 
    else 
    self.default_item 
    end 
end 

: 그 시험 방법을, 그리고

belongs_to :featured_item, :class => Item, :foreign_key => 'featured_item_id' 
belongs_to :default_item, :class => Item, :foreign_key => 'default_item_id' 

을하고 올바른 반환

스토어에 그들을 위해 관계를 추가 그거 가져와. 그렇지 않은 경우 기본값을 얻습니다. 당신은 아마도 싶어 :

validates_presence_of :default_item_id 

이 ... 당신이 전무 항목 문제를하지 않도록 기본은 항상 거기에 확인 할 수 있습니다.

+0

나는 이것이 효과가있을 것이라고 생각하지만 과잉이라고 생각한다. 나는 불리언 만 다루고있다. 그것은 특집이거나 그렇지 않습니다. 난 단지 00000의 목록을 원하고 그 중 하나는 특색 지어진다. 모든 것을 제로로 만든 다음, 이것을 수정하십시오. –

관련 문제